Java 8是否还需要LINQ?还是已经比LINQ 更好?,LINQ一直是.net程序系统中的一个非常棒的东东.VisualStudio2008已经引入了lambda表达式和monads,而同一时间Java6版本还在讨论要不要去掉泛型数据类型.这一成果要归功于荷兰计算机科学家ErikMeijer,他已经全停止掉别的项目.……

LINQ一直是.net程序系统中的一个非常棒的东东. Visual Studio 2008 已经引入了lambda 表达式和monads, 而同一时间Java6版本还在讨论要不要去掉泛型数据类型. 这一成果要归功于荷兰计算机科学家Erik Meijer, 他已经全停止掉别的项目.

Erik Meijer. 摄影:Ade Oshineye. 授权给CC-BY-SA

Java的现状?

即将要发布的Java8和JSR-355,我们还需要LINQ?在过去的十几年中人们一直在尝试用LINQ给Java带来性能的改良。当时,Quaere和Lambdaj似乎在研究一种很有前途的库(非语言级别). 事实上,StackOverflow上有很多Java的使用者提出的有没有与LINQ等价的Java做法(到现在依然) :

LINQ的Java实现?

LINQ的Java工具

Java中有跟LINQ类似的东西么?

Java等效LINQ和实体框架是什么?

有趣的是, "LINQ"已经发展到EL 3.0版本了!

我们真的需要LINQ么?

LINQ的高级特性存在重大缺陷, 从我们角度看来, 将会导致 "next big impedance mismatch". LINQ来源于SQL,这不是一件完美的事情. LINQ流行的LINQ-to-Objects,在.NET下是一种很好的查询方式.Haskell或Scala的成功已表明,真正的函数式编程可以忽略SELECT,WHERE,GROUP BY, 或者HAVING等来进行集合查询。他们使用"fold", "map", "flatMap", "reduce",来获得更高的性能.另一方面LINQ用"skip", "take"使用混合式GROUP BY(不是OFFSET和FETCH).

事实上, 没有一种函数式查询方法可以超越那老旧但好用的SQL外部链接, 分组设置,或 框架窗口功能. 这些结构仅仅是一个SQL开发人员希望看到的结果的声明。他们不是自足的功能,这实际上包含在任何给定的情况下被执行的逻辑。此外,窗口功能,可以只用在SELECT和ORDER BY子句,这是一种明显声明方式,但是如果你没有SQL上下文这也是非常奇怪的。具体来说,SELECT子句中的窗口函数采用正确的数据预取影响整个执行计划和索引的方式。

相反,函数式编程可以在内存中就做到SQL的这些功能。使用SQLesque API 进行集合查询是用函数式方式狡猾的欺骗 了"传统"的人。这样的实现方式是不能将集合数据与SQL表查询的数据合并在一起的,也不会产生预期的SQL查询结果。

我该如何做?

相当简单,你如果使用SQL,你就有两个基本选择:

自上而下,专注你的Java模型. 使用Hibernate / JPA查询并且使用Java8 Streams API 转化Hibernate的查询结果.

自下而上,专注你的SQL关系模型. 继续使用JDBC或者jOOQ, 使用Java8Streams API转化的查询结果.

(译注:这老外不就是说Java8提供了一种接口么,这么费劲)

不能回头.拥抱未来!

虽然 .NET "领先" Java了一些,但这并不是LINQ的问题. 这主要是由于引入了lambda表达式并且支持lambdas的很多APIs. LINQ仅仅只是如何构建这样API的例子.

但我更加兴奋的期望Java 8中的 new Streams API, 以及它给Java生态系统带来的函数式编程. 这是一个由Informatech illustrates写的很棒的一篇博文:如何将常见的LINQ表达式转换为Java 8 Streams API表达式.

所以,不能回头.你可以不用再对.NET开发者眼馋嫉妒. 因为Java 8,我们已经不需要LINQ或者其他API模仿LINQ的"unified querying", 有一个更好的称呼,像"query target impedance mismatch".我们需要真正的SQL关系型数据库查询,我们需要Java 8 Streams API函数式编程查询内存集合数据. 给力 Java 8!

Java 8是否还需要LINQ?还是已经比LINQ 更好?,关于java方面的技术内容就简单的介绍到这里了,更多java教程知识点请继续关注本频道,或者需要了解拓胜java培训方面的,可以在线咨询拓胜教育老师。

linq java_Java 8是否还需要LINQ?还是已经比LINQ更好?相关推荐

  1. LINQ找出重复和不重复的元素及linq OrderBy 方法 两个字段同时排序有关问题

    //重复元素:3,4,5 //不重复元素:1,8,9 int[] arr = { 1, 3, 3, 3, 4, 5, 4, 5, 8, 9, 3 };//不重复元素 var unique = arr. ...

  2. 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)

    为什么80%的码农都做不了架构师?>>>    本文作者:丁同舟,转载自"随手记技术团队"微信公众号. 1.前言 跟移动端IM中追求数据传输效率.网络流量消耗等需 ...

  3. 金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(实战篇)

    本文作者:丁同舟,来自金蝶随手记技术团队. 1.前言 本文接上篇<金蝶随手记团队分享:还在用JSON? Protobuf让数据传输更省更快(原理篇)>,以iOS端的Objective-C代 ...

  4. vs2010 mysql linq to sql 系列_LINQ to SQL 系列 如何使用LINQ to SQL插入、修改、删除数据...

    LINQ和 LINQ to SQL 都已经不是一个新事物了,但是我接触的比较晚,本着绝知此事要躬行的态度,决定写这个系列. 本文使用的测试环境是VS 2010,和sql server 2005数据库. ...

  5. 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第三章 (LINQ TO Objects) 第一节

    LINQ到Objects LINQ到Objects介绍 示例 3-1. 一个LINQ到Objects查询的示例. string[] presidents = {     "Adams&quo ...

  6. 垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)

    垃圾收集 java 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! "无需为用户编写将寄存器返回到自由存储列表的程序." ...

  7. 海量数据“一键筛选”,比Excel还好用的筛选功能,更便捷了

    在 Office 的运用里,小刘最头疼的就是 Excel 了! 尤其遇到数据很多的表格,想要筛选数据做分析,一搞就是一整天,一个数据搞错了,又得重头来,眼睛都看花. 如果直接在标题行使用筛选功能,当数 ...

  8. 魔改GPT自动写网文,速度一秒十字,还能给太监作品无限续更 | 开源

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 如果一个人只看网文,那会写出来怎样的文字? 看了100G网文后,这个AI模型帮你试了一下. 先来一段自由创作: 乍眼看去很有内味,而且基本是 ...

  9. 有了 for (;;) 为什么还需要 while (true) ? 到底哪个更快?

    今日推荐 这 9 个 Java 开源项目 yyds,你知道几个?阿里技术专家推荐的20本书,免费送!K8S 部署 SpringBoot 项目(一篇够用)妙用Java 8中的 Function接口 消灭 ...

最新文章

  1. WebStorm下ReactNative代码提示设置
  2. php跳转app,小程序支持跳转app么
  3. rsa实现js前台加密java后台解密
  4. 深度学习中的内存管理问题研究综述
  5. 无人驾驶(pid算法)
  6. 御剑情缘gm.php,御剑情缘手工端
  7. java实现ssdp协议_SSDP协议最简单的Reactor / Netty实现是什么?
  8. Excel树状数据绘制导出
  9. 计算机硬盘和光驱的接口类型,请问 各位大神,我的主板硬盘接口类型和光驱接口类型...
  10. python拨号_Python进行ADSL拨号
  11. 世界杯最野蛮大战,巴西付出慘重代价步入四强
  12. 在线客服机器人交互功能开发总结
  13. 给本地图片添加水印(图片,文字)
  14. C PRIMER PLUS(第六版编程练习)7.12编程练习_7题
  15. Apache Durid (HDFS原理 特性 读写测试 集群部署 架构设计)
  16. 驾校机器人教练售价_驾校机器人教练温柔鼓励!网友:好怕它被我气死
  17. Samael对决Lucifer!!! ……Dean的任务真相……
  18. Lenovo T420 声音卡解决办法汇总
  19. windows10添加开机自启动项在哪设置?电脑开机自启动怎么设置
  20. STM32:PWM原理总结

热门文章

  1. 软件和硬件的关系-机器码怎么转成电路状态并执行的
  2. Linux 命令行光标快速选中移动快捷键
  3. 利用腾讯云独立IP使用windows用CCProxy搭建多IP代理服务器图文教程实现单窗口单IP
  4. [面试|HTTP] 面试官:说说对Request和Response的了解
  5. Python 实例教学_01_基础语法
  6. 转:模糊的雅黑字体及解决方法
  7. 会议OA之我的会议(会议排座送审)
  8. 门店销售干货 | 4种不同类型的顾客VS销售技巧,直接套用!
  9. 4kmini 毫米波无线拓展坞投屏器
  10. 分布式概念扫盲(Byzantine generals problem/CAP/TPC/TCC)