基於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修改過]
相關文章
- 基於Jetpack元件構建的開源專案-WanLearningJetpack元件
- Nodejs CMS——基於 NestJS/NuxtJS 的完整開源專案NodeJSUX
- 基於.NET Core的優秀開源專案合集
- 思否開源專案推介丨smartParsePro:基於地址的智慧識別專案
- 基於Java+Spring Boot開源專案JeeSite的Jenkins持續互動介紹JavaSpring BootJenkins
- Github上最熱門的Java專案終於開源了!GithubJava
- SpringBoot基於Fly社群模板開源部落格專案Spring Boot
- Java 專案現在基於註解開發Java
- 基於java的專案管理平臺Java專案管理
- 關於 Spartacus 開源專案的 peerDependencies
- [開源專案] 基於 laravel 開發的一個 社群/社交 小程式Laravel
- 基於 Github 平臺的 .NET 開源專案模板. 嘎嘎實用!Github
- 一鍵搭建基於docker的nodejs、php開發環境 (開源專案)DockerNodeJSPHP開發環境
- 五星好評!基於uniapp開發的開源專案推薦APP
- 基於.Net開發的資料庫匯入匯出的開源專案資料庫
- 發起一個開源專案:基於 .NET 的部落格引擎 fluss
- 基於開源的 ChatGPT Web UI 專案,快速構建屬於自己的 ChatGPT 站點ChatGPTWebUI
- 長沙Java培訓:Java開源專案分享Java
- 2018年阿里巴巴關於Java重要開源專案彙總阿里Java
- Joda Time專案和java8時間apiJavaAPI
- 使用EventStoreDB實現事件溯源的Java開源專案事件Java
- Go語言專案實戰:基於開源資料的成語查詢Go
- 基於Flutter的開源專案和App,Flutter入門有她就夠了(一)FlutterAPP
- Spring Security 6.3基於JWT身份驗證與授權開源專案SpringJWT
- 【Java專案(2)】基於Javaee的通訊錄系統Java
- Vue3教程:一個基於 Vue 3 + Vant 3 的商城專案開源啦!Vue
- 一個基於 Vue3 的開源專案,3個月時間 star 終於破千!Vue
- 一個檔案的開源專案,開啟你的開源之旅
- 開源專案推薦:提高研發效率的5個開源專案
- docker-compose一鍵部署java開源專案DockerJava
- 基於ThinkPHP的微信開發專案-微商城PHP
- 基於.NetCore開發部落格專案 StarBlog - (5) 開始搭建Web專案NetCoreWeb
- 開源好專案
- IOS開源專案iOS
- 探究synchronized底層原理(基於JAVA8原始碼分析)synchronizedJava原始碼
- [資源]基於 Pytorch 的 TorchGAN開源了!PyTorch
- 關於cmake和開源專案釋出的那些事(PF)
- C#版本LINQ增強開源庫C#
- linQ基礎