java8 linq4j

长期以来, LINQ是.NET软件工程生态系统中发生的最好的事情之一。 通过在Visual Studio 2008中引入lambda表达式和monad ,它使C#语言跃居Java之前,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的Java等效项是什么?
  • LINQ for Java工具
  • 是否有类似LINQ for Java的东西?
  • Linq和Entity Framework的Java等效项是什么?

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

但是我们真的需要LINQ吗?

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

实际上,除了良好的旧SQL 分区外部联接, 分组集或框架窗口函数之外,没有什么比功能真理更重要的了。 这些构造仅仅是SQL开发人员希望看到的结果的声明。 它们不是独立的函数,实际上包含要在任何给定上下文中执行的逻辑。 而且,窗口函数只能在SELECTORDER 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

java8 linq4j

java8 linq4j_Java 8仍然需要LINQ吗? 还是比LINQ更好?相关推荐

  1. atitit. groupby linq的实现(1)-----linq框架选型 java .net php

    atitit.  groupby linq的实现(1)-----linq框架选型 java .net php 实现方式有如下 1. Dsl/ Java8 Streams AP ,对象化的查询api , ...

  2. LINQ教程二:LINQ操作语法

    LINQ查询时有两种语法可供选择:查询表达式语法(Query Expression)和方法语法(Fluent Syntax). 一.查询表达式语法 查询表达式语法是一种更接近SQL语法的查询方式. L ...

  3. linq to object 、linq to sql 、linq to entity 批量 新增、更新、删除功能扩展

    最近在codeplex上找到了一个功能比较全的linq to object .linq to sql .linq to entity新增.修改.删除功能扩展的控件--magiq. 以linq to s ...

  4. LINQ – 使用DataLoadOptions 提高LINQ to SQL 查询性能

    LINQ – 使用DataLoadOptions 提高LINQ to SQL 查询性能 EntLib.com开源小组发表,http://www.EntLib.com,2008-7-2 LINQ to ...

  5. linq 连接mysql_使用LINQ访问数据库

    1. LINQ to SQL 概览 • 把.NET 类和 SQL 数据通过关系进行映射 • 把 LINQ 查询转化为 SQL 语言进行执行 • 支持对插入,更新,删除操作进行跟踪. 支持实体级别的验证 ...

  6. LINQ学习笔记(9) LINQ to Objects---查询内存中对象的集合

    从这一篇开始要总结的是LINQ在实际中的应用,首先要总结的是LINQ to Objects,也就是LINQ与程序对象的配合使用. 其中程序对象集合最典型就是与数组的配合使用,如下示例: 1 class ...

  7. What is the difference between LINQ to SQL and LINQ to Entities?

    The ability to query relational stores other than the Microsoft SQL Server family of products. What ...

  8. Java8中String.join方法,让我们的代码更优美

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 距Java8(14年3月19日)发布马上就四年了:相信接触过java8的人,会对它的很 ...

  9. LINQ教程一:LINQ简介

    转载自:https://www.cnblogs.com/dotnet261010/p/8278793.html 一.为什么要使用LINQ 要理解为什么使用LINQ,先来看下面一个例子.假设有一个整数类 ...

最新文章

  1. php普通索引和唯一索引,mysql下普通索引和唯一索引的效率对比
  2. Win11让AMD很受伤:CPU游戏性能下降15%,官方建议暂时别升级
  3. Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
  4. 54_pytorch GAN(生成对抗网络)、Gan代码示例、WGAN代码示例
  5. mvc4 ajax url参数,MVC4.0中Ajax通过a标签向后台Action传递参数问题?
  6. 【Q】【poj 1144】【poj 1523】
  7. git 常用操作,撤销修改
  8. Visual Studio 2015开发Android App启动调试始终无法完成应用部署的解决方案
  9. Matplotlib 中文用户指南 3.6 图例指南
  10. mysql poolsize_thread_pool_size的调整
  11. Http请求中Content-Type
  12. tomact配置好ssl证书后访问不到tomact_服务器上配置HTTPS的操作方法!
  13. docker开启otter服务mysql单双向同步数据
  14. DSP CCS5.5安装步骤
  15. LFM回波信号仿真,加汉明窗,可用的matlab代码
  16. 企业生产现场中5S管理的应用
  17. 报错:undefined symbol: _ZN10tensorflow12OpDefBuilder4AttrESs
  18. android usb 读写权限,Android默认给予USB读写权限,去掉受权对话框
  19. 图片太多怎么办?教你怎么批量压缩图片大小
  20. windows10 1909 原版纯净系统分享

热门文章

  1. [XSY4197] Snow(树形DP)
  2. SpringBoot2.1.9 多数据源Mybatis—JDBC配置
  3. 业务太复杂?教你如何降低软件的复杂性
  4. JAVA面试常考系列十
  5. Oracle入门(十一)之SQL
  6. 《金色梦乡》金句摘抄(六)
  7. Servlet使用适配器模式进行增删改查案例(IBaseDaoUtil.java)
  8. 云服务器的购买和宝塔面板的使用
  9. 蓝桥杯JAVA省赛2013-----B------5(有理数类)
  10. win10系统用户访问ftp服务器被拒绝,关于windows2003下ftp用户名无法访问FTP服务器的问题...