加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门网 (https://www.xiamenwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

已经做的更好?论Java 8是否必要LINQ

发布时间:2017-06-07 23:06:18 所属栏目:教程 来源:oschina译者
导读:LINQ一向是.net措施体系中的一个很是棒的特征,Visual Studio 2008 已经引入了lambda 表达式和monads, 而统一时刻Java6版本还在接头要不要去掉泛型数据范例. 这一成就要归功于荷兰计较机科学家Erik Meijer, 他已经全遏制掉此外项目。

        【 评述】LINQ一向是.net措施体系中的一个很是棒的特征,Visual Studio 2008 已经引入了lambda 表达式和monads, 而统一时刻Java6版本还在接头要不要去掉泛型数据范例. 这一成就要归功于荷兰计较机科学家Erik Meijer, 他已经全遏制掉此外项目。

  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, 行使Java8 Streams API 转化的查询功效。

  不能转头,拥抱将来!

  固然 .NET "领先" Java了一些,但这并不是LINQ的题目. 这首要是因为引入了lambda表达式而且支持lambdas的许多APIs. LINQ仅仅只是怎样构建这样API的例子。

  以是,不能转头。你可以不消再对.NET开拓者眼馋妒忌. 由于Java 8,我们已经不必要LINQ可能其他API仿照LINQ的"unified querying", 有一个更好的称号,像"query target impedance mismatch".我们必要真正的SQL相关型数据库查询,我们必要Java 8 Streams API函数式编程查询内存荟萃数据。给力 Java 8!

(编辑:厦门网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读