相关文章推荐
高大的毛衣  ·  将 Entity ...·  1 月前    · 
酷酷的海豚  ·  PHP 使用 curl 返回 false ...·  1 年前    · 

长期以来, LINQ 是.NET软件工程生态系统中发生的最好的事情之一。 通过在Visual Studio 2008中引入 lambda表达式 monads ,它使C#语言比Java(当时的版本6)更先进,并且仍在讨论 泛型类型擦除的 优缺点。 这项成就主要归功于荷兰计算机科学家兼染料专家 Erik Meijer 并获得其认可,他现在正 从事其他项目

Erik Meijer,Tye染料专家。 Ade Oshineye摄 。 根据 CC-BY-SA 许可

Java现在在哪里?

随着即将发布的Java 8和 JSR-355 ,我们仍然需要LINQ吗? 自上个十年中期以来,已经进行了许多尝试来将LINQ的优点带给Java。 当时, Quaere Lambdaj 似乎是在图书馆级别(而不是语言级别)上有希望的实现。 实际上, 大量流行的Stack Overflow问题 暗示了实际上有多少Java人员正在(并且仍然是!)寻找等同的东西:

有趣的是,“ LINQ”甚至 已经成为EL 3.0

但是我们真的需要LINQ吗?

LINQ有一个主要缺陷,该缺陷被宣传为一项功能,但在我们看来,这将不可避免地导致 “下一个大阻抗失配” 。 LINQ受SQL启发,这根本不是一件好事。 LINQ最流行于 LINQ-to-Objects ,这是查询.NET中集合的一种好方法。 但是, Haskell Scala 的成功表明,“集合查询”的真正功能本质倾向于使用除 SELECT WHERE GROUP BY HAVING 之外的其他术语。 他们使用的术语包括“折叠”,“地图”,“ flatMap”,“减少”等等。 另一方面,LINQ使用 GROUP BY 和“ skip”,“ take”(而不是 OFFSET FETCH )等术语的混合体。

实际上,除了良好的旧SQL 分区外部 联接, 分组集 框架窗口函数 之外,没有什么比功能真理更重要的了。 这些构造仅仅是SQL开发人员希望看到的结果的声明。 它们不是独立的函数,实际上包含要在任何给定上下文中执行的逻辑。 而且,窗口函数只能在 SELECT ORDER BY 子句中使用, 这在以声明方式进行思考时很明显 ,但是如果您没有SQL上下文,这也很奇怪。 具体来说, SELECT 子句中的窗口函数会影响整个执行计划,以及采用索引来预取正确数据的方式。

相反,真正的函数式编程对内存中集合的作用比SQL还要多。 使用SQLesque API进行集合查询是一个 狡猾的决定 ,目的是欺骗“传统”人员采用函数式编程。 但是,使集合和SQL表查询可以混淆的希望令人失望,因为 这样的构造不会产生所需的SQL执行计划

相反,真正的函数式编程对内存中集合的作用比SQL还要多。 使用SQLesque API进行集合查询只是错误的决定。 令人失望的是,收集和SQL表查询可能会混淆在一起,因为 这样的构造将不可避免地产生可怕的SQL执行计划

但是,如果我

这很简单。 执行SQL时,有两个基本选择。

  • “自上而下”进行操作,将大部分精力放在Java域模型上。 在这种情况下,请使用 Hibernate / JPA通过Java 8 Streams API查询和转换Hibernate结果。
  • “自下而上”进行操作,将大部分精力放在您的SQL /关系域模型上。 在这种情况下,请使用JDBC或 jOOQ, 然后再次使用Java 8 Streams API转换结果。

此处对此进行了更详细的说明: http : //www.hibernate-alternative.com

拥抱未来!

虽然.NET在Java领域已经“领先”一段时间了,但这并不是由于LINQ本身引起的。 这主要是由于引入了lambda表达式以及lambda对* ALL * API的影响。 LINQ只是如何构造此类API的一个示例,尽管LINQ赢得了大多数赞誉。

但是,我对Java 8的新Streams API以及它将如何包含Java生态系统中的 某些 功能编程感到更加兴奋。 Informatech在一篇非常好的博客文章中说明 了常见的LINQ表达式如何转换为Java 8 Streams API表达式。

所以,不要回头。 停止羡慕.NET开发人员。 使用Java 8,我们将不需要LINQ或任何试图以“统一查询”为基础来模仿LINQ的API,这对于真正的“查询目标阻抗不匹配”来说是一个更好的称呼。 我们需要真正的SQL来进行关系数据库查询,并且需要Java 8 Streams API来进行内存中集合的功能转换。 而已。 使用Java 8!

参考: Java 8是否仍需要LINQ? 还是比LINQ更好? 从我们的 JCG合作伙伴 Lukas Eder在 JAVA,SQL和JOOQ 博客中获得。

翻译自: https://www.javacodegeeks.com/2013/11/does-java-8-still-need-linq-or-is-it-better-than-linq.html

长期以来, LINQ是.NET软件工程生态系统中发生的最好的事情之一。 通过在Visual Studio 2008中引入lambda表达式和monads ,它使C#语言跃居Java之前,当时Java是6版本,但仍在讨论泛型类型擦除的优缺点。 这项成就主要归功于荷兰计算机科学家兼染料专家Erik Meijer并获得其认可,他现在正从事其他项目 。 Erik Meijer,Tye染料专家...
LINQ ,语言级集成查询(Language INtegrated Query)   经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题。其中两个最主要访问的数据源与 数据库 ( database )和 XML 相关。 LINQ 提供了一条更常规的途径即给 .Net Framework 添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific ) 更好 的方式。这些语法特性就叫做 .NET Language Integrated Query ( LINQ ) 。 大量的 LINq 实例。源代码,方便自学,深究,全部为实例代码,欢迎下载,
linq -to- java LINQ 列表查询移植到 Java 作为经常使用C#和 Java 进行编程的人,使用 Java 进行编程时,我最想念的是C#的 LINQ 列表查询。 因此,我决定将其移植。 我知道 Java 8引入了很多这样的功能,但是我认为语法很丑陋,而C# 更好 。 该项目将为也使用 Java 的C#程序员提供一种通用的,熟悉的列表查询语法。 这是一个正在进行的工作。 它尚未经过性能测试,尚未优化。 许多事情都是“快速而肮脏的”(请阅读我的一些TODO)。 一些代码具有副作用(大多数方法不是纯函数)。 这是有关如何使用某些代码的示例: 公开课测试{ public static void main(String[] args){ LArrayList<String> myStringList = new LArrayList<>(); myStringList.add("H
java 是去蜗牛还是源码时代 本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路,如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉? 我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。 我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,Jquery用的人最近比较多啊,听说最近MVC比较火,还有 LINQ ,听说微软又有Silverlight了…… 我发现虽然我工作几年了,除了不停的coding,Ctrl+c和Ctrl+V更熟练了,但编码水平并没有提高,还是一个普通程序员,但有人已经做到架构师了。 工作好几年了,想跳槽换个工作,结果面试的考官都问了一些什么数据结构,什么垃圾回收,什么设计模式之类的东西,虽然看过,但是平时用不着,看了也忘记了,回答不上来,结果考官说我基础太差。。。 有没有,如果没有,接下来就不用看了,你一定是大拿了,或者已经明白其中之道了,呵呵。 如果有,恭喜
开发 JAVA 一段时间,面临的一大问题就是集合操作,习惯了 LINQ 的简洁语法,对 JAVA 的集合操作实在是无甚好感,只能通过C系的循环实现筛选等操作,由于没有延迟执行特性,内存占用实在不敢恭维。因此便在网上找到了 linq 4j, 一个针对 JAVA linq 移植版本。下面的文章,就会对这一工具进行简要的介绍。 一. 安装 该项目的Github地址是:https://github.com/julianhyde/ linq 4j. 显然是一个个人项目...
LINQ 已经非常成功,但在.NET生态系统中也引起了争议。 许多人正在 Java 世界中寻找可比的解决方案。 为了 更好 地理解什么是可比的解决方案,让我们看一下 LINQ 解决的主要问题: 查询语言通常是具有许多关键字的声明性 编程语言 。 它们提供的控制流元素很少,但是具有很高的描述性。 最受欢迎的查询语言是SQL ,这是ISO / IEC标准化的结构化查询语言,主要用于关系 数据库 。 声明式编程...
2008-02-15 10:45 LINQ ,语言级集成查询(Language INtegrated Query)。 LINQ 是微软将在C# 3.0中将推出的语言集成查询技术,许多人也将 LINQ 叫做微软的ORM。 LINQ 不仅仅针对关系 数据库 ,它只是解决一个问题Data!=Object。   【IT专家网独家】引子:
linq 4j 是 LINQ Java 语言移植版本。语言集成查询 ( LINQ ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中一项突破性的创新,它在对象领域和数据领域之间架起了一座桥梁。 标签: linq 4j
LINQ 和Lambda都是C# 编程语言 的功能,但它们有不同的用途。 LINQ 是一个查询语言,允许您使用类似于SQL的语法查询各种数据源,例如 数据库 、集合、XML文档等。使用 LINQ 可以更容易地查询和处理数据,从而减少了编写大量循环和条件语句的代码。 Lambda是一种表达式,用于创建匿名方法或委托。Lambda表达式通常用于 LINQ 查询中作为筛选器、选择器或排序器。它允许您更轻松地编写匿名函数,并且可以提高代码的可读性和可维护性。 因此,虽然 LINQ 和Lambda经常一起使用,但它们有不同的功能和用途。 LINQ 用于查询和处理数据,而Lambda用于编写匿名方法和委托。