1. 程式人生 > >Linq in Java

Linq in Java

表達式 聯系 獲得 可能 不同 能力 question scala 函數

這是關於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的技術委員會真他媽是一個暮氣沈沈的機構,早該倒閉了。

Linq in Java