Linq in Java

这是关于Java和Linq的描述, 经典的话一定要记下来:

作者:赵劼
链接:https://www.zhihu.com/question/25351707/answer/30507628
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

完整的LINQ分以下几部分,缺一不可:

  1. Lambda Expression
  2. Query Expression
  3. Extension Methods
  4. Expression Tree
  5. Anonymous Types

Java除了第一个后面都没有。你可以认为Java的Streams API是一个:

  1. 无法用Monad形式(没有Query Expression)
  2. 难以扩展的(没有Extension Methods)
  3. 无法表达语句结构及动态编译函数(没有Expression Tree)
  4. 无法借助临时结构减少计算或增强表达能力(没有Anonymous Types)

的LINQ。

此外,这套API不是加在标准的Iterator和Iterable模型上的(在C#叫IEnumerator和IEnumerable),导致又多了一套Streams模型出来,而又和IO的Stream容易产生混淆,真不知道设计者是怎么想的,搞个Extension Methods出来多好,不光对LINQ有用,简直方便之至。

总而言之,Java 8这套给我的感觉就是因为不愿意搞出和C#一样的设计而引入的半吊子东西。当年Lambda表达式的草案是和C#以及Scala一样使用“=>”符号的,结果最后硬要改为“->”真是生怕别人不知道要故意跟C#不同。

Java也真不争气,Linq都出来多久了,这Java上还弄的是这个样子。目前Java能引以自豪的可能就只有三样:跨平台,强啊而灵活的JVM和众多的开源项目。现在.Net也开源了,也跨平台了,如果Java还这样停滞不前的话,再过几年可能是.Net的天下了。决策上过分的民主只会是内耗。明智的取舍和大胆的前进才有光辉的明天。Java的技术委员会真他妈是一个暮气沉沉的机构,早该倒闭了。

时间: 2024-10-15 11:42:31

Linq in Java的相关文章

atitit. 集合groupby 的实现(2)---自定义linq查询--java .net php

atitit.  集合groupby 的实现(2)---自定义linq查询--java .net php 实现方式有如下 1. Linq的实现原理流程(ati总结) 1 2. groupby  与 事先排序 2 3. #----------聚合函数 2 4. 自定义linq查询Linq .from(li) .groupBy("url","user" ) .select("url", count().as("countx"), 

java 的 linq,不要再写令人讨厌的 for 了!

package com.ly.linq; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; public class Enm { public static <T> ArrayList<T> notNull(Iterable<T> source) { return where(source, new Pre<T>() { @Override pub

Java的jLinqer包介绍

1.介绍 熟悉C#的lambda 表达式,想要使用 LINQ 在 Java,是个问题,虽然 Java8用函数式接口已经实现了部分lambda 表达式,但是还是不够灵活. 2.Linqer简介 Linqer 是在 Java 中的可以使用 LINQ 语言集成查询 (LINQ).可以弥补目前Java8在 LINQ方面的一些不足,实现了在 c# 中 的(selectMany,Union, Intersect, Except等). 3.使用方法 如果你使用 Maven,请在以下 pom.xml 应用以下包

疯狂Java学习笔记(87)-----------十篇必读的Java文章

1.Brian Goetz:"管理工作:发人深省的部分" 这其实不是一篇博文,而是Brian Goetz对于甲骨文公司Java的管理的一个非常有趣的讨论的记录.在 以前我们将Java语言与Scala或者Ceylon相比较的时候,对其1-2个特性一直稍微有些意见. 对于为什么Java尽快变得和其他语言一样"时髦"不是一个好主意,Brian提出了很好的观点.每一个Java开发者都应有所了解(大约一个小时). Youtube链接. 2.Aleksey Shipilёv:(

A博娱乐十篇必读的Java文章

A博娱乐一个月前,我们发布了一份<十篇必读的SQL文章>清单,我们相信这些文章将为jOOQ博客的读者提供 极大的价值.jooQ是一个专注于Java和SQL的博客,所以一个月后的今天,我们发布一份同样令人兴奋 的<十篇必读的Java文章>清单,是再自然不过的事情. 请注意对于"必读的"这个描述,我们不仅仅特指某一篇链接的文章,也可能包含来自同一作者的其 它文章,这些作者在这些年一直是博客的中坚力量,总是能创造新的令人关注的内容. 让我们来看看吧! 1.Brian

C++坑点集合 - 2 严格的Multipass Guarantee

之前写了一个char32_iterator,简单说就是封装一个string::const_iterator,在operator*的时候将它引用的utf-8序列转为utf-32编码的单个字符返回--这看上去很简单.平时各位在编程的过程中一定会遇到类似的需求:实现一个惰性的transform,在一个容器的每一个元素上应用一个转换函数,但不是立即应用,而是等到使用它的时候即时转换.这听起来就像C#的Linq或者Java的Stream API.熟悉C++的你,一定会想到封装一个迭代器,就像我前面的cha

编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)

主要的编程范式有三种:命令式编程,声明式编程和函数式编程. 命令式编程:命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么.比如:如果你想在一个数字集合 collection(变量名) 中筛选大于 5 的数字,你需要这样告诉计算机:第一步,创建一个存储结果的集合变量 results:第二步,遍历这个数字集合 collection:第三步:一个一个地判断每个数字是不是大于 5,如果是就将这个数字添加到结果集合变量 results 中.代码实现如下: List<int>

Java进击C#——应用开发之Linq和EF

本章简言 上一章笔者对于WinForm开发过程用到的几个知识点做了讲解.笔者们可以以此为开端进行学习.而本章我们来讲一个跟ORM思想有关的知识点.在讲之前让我们想一下关于JAVA的hibernate知识点.hibernate也是ORM框架.记得hibernate里面有一个叫HQL.先不管HQL的好与坏.主要是明白HQL的目地是什么.ORM的思想就是为了让用户在操作数据的时候用上面向对象的思想来看,而不是二维数据了.所以HQL笔者认为就是一个面向对象思想的SQL语句.那么为什么笔者要讲到HQL呢?

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

atitit.  groupby linq的实现(1)-----linq框架选型 java .net php 实现方式有如下 1. Dsl/ Java8 Streams AP ,对象化的查询api ,推荐 1 2. Linq::: like  sql 的dsl 1 1.1. linq4j (jdk6 ok,jdk7 编译错误,又马jar下载) 1 1.2. Quaere:Java上的LINQ(新不上sourcecode) 1 1.3. joSQL也是与Quaere类似的API 2 1.4. .n