Java 8的Streams API和.Net的LINQ使用上最大的不同是什么

2025-04-26 02:45:30
推荐回答(1个)
回答1:

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

  • Lambda Expression

  • Query Expression

  • Extension Methods

  • Expression Tree

  • Anonymous Types

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

  • 无法用Monad形式(没有Query Expression)

  • 难以扩展的(没有Extension Methods)

  • 无法表达语句结构及动态编译函数(没有Expression Tree)

  • 无法借助临时结构减少计算或增强表达能力(没有Anonymous Types)

  • 的LINQ。

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

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