Java Stream API の機能強化。
このライブラリは、Java 8 ストリーム クラスと完全に互換性があり、多くの便利な追加メソッドを提供するStreamEx
、 IntStreamEx
、 LongStreamEx
、 DoubleStreamEx
の 4 つのクラスを定義します。また、マップ エントリのストリームを表し、この場合に追加の機能を提供するEntryStream
クラスも提供されています。最後に、 MoreCollectors
クラスとプリミティブ コレクターの概念で定義されたいくつかの便利な新しいコレクターがあります。
完全な API ドキュメントはここから入手できます。
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 '
プルリクエストは大歓迎です。