2KB项目,专业的源码交易网站 帮助 收藏 每日签到

Java 8 能否还需求 LINQ?仍是曾经比 LINQ 更好?

  • 时间:2019-06-12 20:44 编辑:2KB 来源:2KB.COM 阅读:558
  • 扫一扫,手机访问
  • 分享
摘要:
Java 英文原文:Does Java 8 Still Need LINQ? Or is it Better than LINQ?

Featured article by oschina reproduced with permission by Data Geekery GmbH.
English content copyright © 2013 by Data Geekery GmbH.
(此处请勿翻译)


LINQ不断是.net程序系统中的一个十分棒的东东. Visual Studio 2008 曾经引入了lambda 表达式monads, 而统一时间Java6版本还在会商要不要去掉泛型数据类型. 这一效果要归功于荷兰盘算机科学家Erik Meijer, 他曾经全中止掉此外项目.

enter image description here

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

Java的近况?

行将要发布的Java8和JSR-355,我们还需求LINQ?在过来的十几年中人们不断在测验考试用LINQ给Java带来功能的改进。事先,QuaereLambdaj仿佛在研讨一种很有出路的库(非言语级别). 现实上,StackOverflow上有非常多Java的运用者提出的是否与LINQ等价的Java做法(到如今仍然) :

风趣的是, "LINQ"曾经开展到EL 3.0版本了!

我们真的需求LINQ么?

LINQ的初级特征存在严重缺点, 从我们角度看来, 将会招致 "next big impedance mismatch". LINQ起源于SQL,这不是一件完满的工作. LINQ盛行的LINQ-to-Objects,在.NET下是一种很好的查询方法.HaskellScala的成功已标明,真实的函数式编程可以疏忽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 转化的查询后果.

概况猛击这里: http://www.hibernate-alternative.com

(译注:这老外不就是说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!

本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协议,假如我们的任务有进犯到您的权益,请实时联络我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
上一篇:Docker 公司已死
下一篇:奇虎360 和 go
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部