streamex
StreamEx 0.8.3
增强 Java Stream API。
该库定义了四个类: StreamEx
、 IntStreamEx
、 LongStreamEx
、 DoubleStreamEx
,它们与 Java 8 流类完全兼容,并提供许多有用的附加方法。此外,还提供了EntryStream
类,它表示映射条目流并为此情况提供附加功能。最后, MoreCollectors
类中定义了一些有用的新收集器以及原始收集器概念。
完整的 API 文档可在此处获取。
请查看 Cheatsheet,了解 StreamEx 的简要介绍!
在更新 StreamEx 之前,请检查迁移说明和完整的更改列表。
StreamEx主要有以下几点:
收集器快捷方法(toList、toSet、groupingBy、joining 等)
List < String > userNames = StreamEx . of ( users ). map ( User :: getName ). toList ();
Map < Role , List < User >> role2users = StreamEx . of ( users ). groupingBy ( User :: getRole );
StreamEx . of ( 1 , 2 , 3 ). joining ( "; " ); // "1; 2; 3"
选择特定类型的流元素
public List < Element > elementsOf ( NodeList nodeList ) {
return IntStreamEx . range ( nodeList . getLength ())
. mapToObj ( nodeList :: item ). select ( Element . class ). toList ();
}
将元素添加到流中
public List < String > getDropDownOptions () {
return StreamEx . of ( users ). map ( User :: getName ). prepend ( "(none)" ). toList ();
}
public int [] addValue ( int [] arr , int value ) {
return IntStreamEx . of ( arr ). append ( value ). toArray ();
}
删除不需要的元素并将流用作 Iterable:
public void copyNonEmptyLines ( Reader reader , Writer writer ) throws IOException {
for ( String line : StreamEx . ofLines ( reader ). remove ( String :: isEmpty )) {
writer . write ( line );
writer . write ( System . lineSeparator ());
}
}
按值谓词选择映射键:
Map < String , Role > nameToRole ;
public Set < String > getEnabledRoleNames () {
return StreamEx . ofKeys ( nameToRole , Role :: isEnabled ). toSet ();
}
对键值对进行操作:
public Map < String , List < String >> invert ( Map < String , List < String >> map ) {
return EntryStream . of ( map ). flatMapValues ( List :: stream ). invert (). grouping ();
}
public Map < String , String > stringMap ( Map < Object , Object > map ) {
return EntryStream . of ( map ). mapKeys ( String :: valueOf )
. mapValues ( String :: valueOf ). toMap ();
}
Map < String , Group > nameToGroup ;
public Map < String , List < User >> getGroupMembers ( Collection < String > groupNames ) {
return StreamEx . of ( groupNames ). mapToEntry ( nameToGroup :: get )
. nonNullValues (). mapValues ( Group :: getMembers ). toMap ();
}
成对差异:
DoubleStreamEx . of ( input ). pairMap (( a , b ) -> b - a ). toArray ();
支持 byte/char/short/float 类型:
short [] multiply ( short [] src , short multiplier ) {
return IntStreamEx . of ( src ). map ( x -> x * multiplier ). toShortArray ();
}
递归地定义自定义惰性中间操作:
static < T > StreamEx < T > scanLeft ( StreamEx < T > input , BinaryOperator < T > operator ) {
return input . headTail (( head , tail ) -> scanLeft ( tail . mapFirst ( cur -> operator . apply ( head , cur )), operator )
. prepend ( head ));
}
还有更多!
该项目已获得 Apache License 2.0 版许可
Maven Central 中提供了版本
在更新 StreamEx 之前,请检查迁移说明和完整的更改列表。
将此代码段添加到项目的 pom.xml dependencies
项部分:
< dependency >
< groupId >one.util</ groupId >
< artifactId >streamex</ artifactId >
< version >0.8.3</ version >
</ dependency >
将此代码段添加到项目的 build.gradle dependencies
项部分:
implementation ' one.util:streamex:0.8.3 '
欢迎请求请求。