Java 8 是否还需要 LINQ?还是已经比 LINQ 更好? 已翻译 100%

oschina 投递于 2013/11/05 06:00 (共 6 段, 翻译完成于 11-21)
阅读 20665
收藏 40
4
加载中

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

围观
围观
翻译于 2013/11/11 15:41
1

Java的现状?

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

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

围观
围观
翻译于 2013/11/11 16:01
1

我们真的需要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).

围观
围观
翻译于 2013/11/11 16:15
1

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

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

围观
围观
翻译于 2013/11/21 16:13
2

我该如何做?

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

  • 自上而下,专注你的Java模型. 使用Hibernate / JPA查询并且使用Java8 Streams API 转化Hibernate的查询结果.
  • 自下而上,专注你的SQL关系模型. 继续使用JDBC或者jOOQ, 使用Java8 Streams API 转化的查询结果.

详情猛击这里: http://www.hibernate-alternative.com

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

围观
围观
翻译于 2013/11/11 16:23
1

不能回头.拥抱未来!

虽然 .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!

围观
围观
翻译于 2013/11/21 15:59
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(47)

TimAndy
TimAndy
Linq for Java:https://github.com/timandy/linq
JarvanMo
JarvanMo

引用来自“进击的代码”的评论

引用来自“codepat”的评论

引用来自“se77en”的评论

引用来自“teleport”的评论

引用来自“小志、”的评论

net有多少人在用?

是不是去掉“多少”二字更合适!

金融界90%,工业界70%,互联网界20%
顺便说一下,stackoverflow用的就是.net

总共180%咩

他说的应该是每个业界占用的比例,金融界的确好多都是.NET难道都是不差钱?

引用来自“蓝飞龙”的评论

主要是国内都是用Windows的缘故吧,如果都用Linux的,谁还会鸟.NET啊。
全世界上来说,用.net确实不如java多.
蓝飞龙
蓝飞龙

引用来自“进击的代码”的评论

引用来自“codepat”的评论

引用来自“se77en”的评论

引用来自“teleport”的评论

引用来自“小志、”的评论

net有多少人在用?

是不是去掉“多少”二字更合适!

金融界90%,工业界70%,互联网界20%
顺便说一下,stackoverflow用的就是.net

总共180%咩

他说的应该是每个业界占用的比例,金融界的确好多都是.NET难道都是不差钱?
主要是国内都是用Windows的缘故吧,如果都用Linux的,谁还会鸟.NET啊。
T
Tou
其实.net在很多方面都相当不错,很多开源项目也有.net版本,相信和java相比,各有优劣。
bdnet
bdnet
写习惯了。net 现在写 java, 一下回到了解放前啊!!!
一曲忠臣的战歌
一曲忠臣的战歌

引用来自“se77en”的评论

引用来自“teleport”的评论

引用来自“小志、”的评论

net有多少人在用?

是不是去掉“多少”二字更合适!

金融界90%,工业界70%,互联网界20%
顺便说一下,stackoverflow用的就是.net

工业界70%???在做这个,感觉和下位机对接上超级不方便.所以70不大可能的.
零点三六
零点三六

引用来自“codepat”的评论

引用来自“se77en”的评论

引用来自“teleport”的评论

引用来自“小志、”的评论

net有多少人在用?

是不是去掉“多少”二字更合适!

金融界90%,工业界70%,互联网界20%
顺便说一下,stackoverflow用的就是.net

总共180%咩

个人觉得工业界可能还不止70%
leeoo
leeoo

引用来自“进击的代码”的评论

引用来自“codepat”的评论

引用来自“se77en”的评论

引用来自“teleport”的评论

引用来自“小志、”的评论

net有多少人在用?

是不是去掉“多少”二字更合适!

金融界90%,工业界70%,互联网界20%
顺便说一下,stackoverflow用的就是.net

总共180%咩

他说的应该是每个业界占用的比例,金融界的确好多都是.NET难道都是不差钱?

是.NET好做Windows环境下的界面。。。
树相马
树相马
linq比原生慢!
竟悟
竟悟

引用来自“南湖船老大”的评论

引用来自“codepat”的评论

引用来自“se77en”的评论

引用来自“teleport”的评论

引用来自“小志、”的评论

net有多少人在用?

是不是去掉“多少”二字更合适!

金融界90%,工业界70%,互联网界20%
顺便说一下,stackoverflow用的就是.net

总共180%咩

数学是小学老师教的?

果然数学等同于五仁月饼。。。
返回顶部
顶部