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 '
歡迎請求請求。