长期以来,
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用于编写匿名方法和委托。