本项目提供一个强大而完备的流式编程API,并独创性的为Java添加类似生成器的编程机制。
网页端参考:阿里云社区
手机端参考:阿里开发者微信公众号
这一机制的设计思想与核心代码在上述公开文章中都已阐述完整,本项目是在此基础上的完全重写,未来发展也将主要面向开源社区需求。
文档请参考:Wiki
项目已发布到Central Maven,直接引用即可
<dependency>
<groupId>io.github.wolray</groupId>
<artifactId>seq</artifactId>
<version>2.0.0</version>
</dependency>可使用中文直接提issue,也可添加微信radiumlei2010进群,方便大家沟通,收集反馈。
由于Seq2和SeqMap高度相关,还是把它加了回来,并配套提供了诸多转换方法,如mapKeys, mapValues, pairBy, pairWith等。
集合类型的Seq统一对齐SizeSeq,这是一层很有必要的抽象。
新增mapIf方法,流的映射更为方便了。
进行了完全重构,原本的Seq由consumer机制切换为了predicate机制,每次触发回调函数的同时会判定当前流是否终止,类似于Golang 1.23里的range from func,只不过返回的boolean代表终止而非Golang里的继续。
基于这样的根本性改造,Seq2,Seq3等多参数流也被移除,在Java 17的record关键字加持下,新建元组的开销很低,多参数流不再有必要维护。
除此以外,本次更新还完全重构和优化了Reducer的机制,去掉了多余的Transducer的概念,达到了一种大和谐的境界,不过用起来和之前倒是没啥区别。
新增IOChain, ByteSource, Seq2, Seq3, SeqList, SeqMap, SeqQueue, Splitter, BackedSeq
调整了Reducer, Transducer的部分逻辑,新增了groupBy, toMap等功能
新增IntSeq, Lazy, BatchedSeq, SeqSet, windowed, timeWindowed