基於Java8的LINQ開源專案:Java Enumerable
微軟推出的LINQ曾經領先Java很長一段時間,如今隨著Java 8的lambdas推出,Java總算趕上來,streams有如下方法:
map
filter
flatMap
distinct
sorted
limit (i.e. take)
skip
reduce (i.e fold)
min
max
any
all
generate (for building infinite lists)
但是有一問題不能擴充套件它們,比如如果希望實現如下:
first
last
nth
windowed
intersperse
intercalate
tails
intersect
zip
groupRuns
這些都是F#/Haskell的豐富函式功能,.NET 是使用 extension方法解決lambda這個問題的。
如今使用Java 8重新構建的LinQ開源專案推出:Java Enumerable
這個受F#,C#和Haskell的啟發,使用Java遞延懶集合的實現。目標是使與iterable中元素更容易打交道,提供如下:
Map
Zip
Zip3
Filter
FlatMap
Order
OrderBy
OrderDesc
OrderByDesc
Take
TakeWhile
Skip
SkipWhile
Iter
Iteri
DistinctUnion
Distinct
DistinctBy
Intersect
Except
First
Last
Nth
Fold
FoldWithDefaultSeed
Any
All
Windowed
Tails
Pairwise
GroupRuns
Intersperse
Intercalate
ToDictionary
ToGroupedDictionary
Range
Min
Max
MinBy
MaxBy
比如Iterator 鏈實現如下:
基本思想是是為你想要做的每一個型別的處理建立一個迭代器,如果你要做一個map函式,你應當建立一個迭代器iterator來包裹源.
更多案例見:http://onoffswitch.net/building-linq-java/
map
filter
flatMap
distinct
sorted
limit (i.e. take)
skip
reduce (i.e fold)
min
max
any
all
generate (for building infinite lists)
但是有一問題不能擴充套件它們,比如如果希望實現如下:
first
last
nth
windowed
intersperse
intercalate
tails
intersect
zip
groupRuns
這些都是F#/Haskell的豐富函式功能,.NET 是使用 extension方法解決lambda這個問題的。
如今使用Java 8重新構建的LinQ開源專案推出:Java Enumerable
這個受F#,C#和Haskell的啟發,使用Java遞延懶集合的實現。目標是使與iterable中元素更容易打交道,提供如下:
Map
Zip
Zip3
Filter
FlatMap
Order
OrderBy
OrderDesc
OrderByDesc
Take
TakeWhile
Skip
SkipWhile
Iter
Iteri
DistinctUnion
Distinct
DistinctBy
Intersect
Except
First
Last
Nth
Fold
FoldWithDefaultSeed
Any
All
Windowed
Tails
Pairwise
GroupRuns
Intersperse
Intercalate
ToDictionary
ToGroupedDictionary
Range
Min
Max
MinBy
MaxBy
比如Iterator 鏈實現如下:
private Function<Iterable<TSource>, Iterator<TSource>> iteratorGenerator; public static <TSource> Enumerable<TSource> init(Iterable<TSource> source){ return new Enumerable<>(_ig -> new EnumerableIterator<>(source)); } protected Enumerable(Function<Iterable<TSource>, Iterator<TSource>> iteratorGenerator) { this.iteratorGenerator = iteratorGenerator; } @Override public Iterator<TSource> iterator() { return iteratorGenerator.apply(this); } // The underlying iterator public class EnumerableIterator<TSource> implements Iterator<TSource> { protected Iterator<TSource> source; private Iterable<TSource> input; public EnumerableIterator(Iterable<TSource> input){ this.input = input; reset(); } protected void reset(){ source = input.iterator(); } @Override public boolean hasNext() { return source.hasNext(); } @Override public TSource next() { return (TSource)source.next(); } } <p class="indent"> |
基本思想是是為你想要做的每一個型別的處理建立一個迭代器,如果你要做一個map函式,你應當建立一個迭代器iterator來包裹源.
更多案例見:http://onoffswitch.net/building-linq-java/
[該貼被banq於2014-03-08 15:45修改過]
相關文章
- 基於.NET Core的優秀開源專案合集
- 基於開源專案搭建屬於自己的技術堆疊
- 基於Jetpack元件構建的開源專案-WanLearningJetpack元件
- 10個基於Web的開源專案管理系統Web專案管理
- 思否開源專案推介丨smartParsePro:基於地址的智慧識別專案
- Java 專案現在基於註解開發Java
- Github上最熱門的Java專案終於開源了!GithubJava
- [開源專案] 基於 laravel 開發的一個 社群/社交 小程式Laravel
- 關於 Spartacus 開源專案的 peerDependencies
- 基於java的專案管理平臺Java專案管理
- Nodejs CMS——基於 NestJS/NuxtJS 的完整開源專案NodeJSUX
- 基於 Github 平臺的 .NET 開源專案模板. 嘎嘎實用!Github
- 基於.Net開發的資料庫匯入匯出的開源專案資料庫
- 基於Java+Spring Boot開源專案JeeSite的Jenkins持續互動介紹JavaSpring BootJenkins
- 學習開源 java 專案 gunsJava
- SpringBoot基於Fly社群模板開源部落格專案Spring Boot
- 發起一個開源專案:基於 .NET 的部落格引擎 fluss
- 一鍵搭建基於docker的nodejs、php開發環境 (開源專案)DockerNodeJSPHP開發環境
- 五星好評!基於uniapp開發的開源專案推薦APP
- 基於開源的 ChatGPT Web UI 專案,快速構建屬於自己的 ChatGPT 站點ChatGPTWebUI
- 在 Android 專案中使用 Java8AndroidJava
- 基於NX開發Angular專案Angular
- 長沙Java培訓:Java開源專案分享Java
- Yadi是基於Java8的依賴注入容器Java依賴注入
- 一個基於Java的開源URL嗅探器Java
- 基於Java的四大開源測試工具Java
- 5個基於JAVA的開源NoSQL資料庫JavaSQL資料庫
- Joda Time專案和java8時間apiJavaAPI
- 基於Flutter的開源專案和App,Flutter入門有她就夠了(一)FlutterAPP
- Go語言專案實戰:基於開源資料的成語查詢Go
- [Kails] 一個基於 Koa2 構建的類似於 Rails 的 nodejs 開源專案AINodeJS
- 使用EventStoreDB實現事件溯源的Java開源專案事件Java
- LinkedIn的Java開源URL檢測器專案Java
- 基於ThinkPHP的微信開發專案-微商城PHP
- 設計模式Java實現開源專案設計模式Java
- 泰拉瑞亞遊戲Java開源專案TerraLegion遊戲Java
- Java開源專案Hibernate快速入門Java
- Vue3教程:一個基於 Vue 3 + Vant 3 的商城專案開源啦!Vue