• 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的技术委员会真他妈是一个暮气沉沉的机构,早该倒闭了。
  • 相关阅读:
    Java中子类继承了父类的私有属性及方法吗?
    为什么静态成员、静态方法中不能用this和super关键字
    poj 3378 二维树状数组
    poj 3034 动态规划
    poj 2498 动态规划
    poj 2029 二维树状数组
    hdu 3280 动态规划
    hdu 2586 LCA
    poj 3689 树形dp
    poj 1947 树形dp
  • 原文地址:https://www.cnblogs.com/traffic/p/6978534.html
Copyright © 2020-2023  润新知