Meningkatkan Java Stream API.
Pustaka ini mendefinisikan empat kelas: StreamEx
, IntStreamEx
, LongStreamEx
, DoubleStreamEx
yang sepenuhnya kompatibel dengan kelas aliran Java 8 dan menyediakan banyak metode tambahan yang berguna. Selain itu, kelas EntryStream
disediakan yang mewakili aliran entri peta dan menyediakan fungsionalitas tambahan untuk kasus ini. Terakhir, ada beberapa kolektor baru yang berguna yang didefinisikan dalam kelas MoreCollectors
serta konsep kolektor primitif.
Dokumentasi API lengkap tersedia di sini.
Lihatlah Cheatsheet untuk pengenalan singkat tentang StreamEx!
Sebelum memperbarui StreamEx, periksa catatan migrasi dan daftar lengkap perubahan.
Poin utama StreamEx adalah sebagai berikut:
Metode pintasan kolektor (toList, toSet, groupingBy, join, dll.)
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"
Memilih elemen aliran dari tipe tertentu
public List < Element > elementsOf ( NodeList nodeList ) {
return IntStreamEx . range ( nodeList . getLength ())
. mapToObj ( nodeList :: item ). select ( Element . class ). toList ();
}
Menambahkan elemen ke aliran
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 ();
}
Menghapus elemen yang tidak diinginkan dan menggunakan aliran sebagai 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 ());
}
}
Memilih kunci peta berdasarkan predikat nilai:
Map < String , Role > nameToRole ;
public Set < String > getEnabledRoleNames () {
return StreamEx . ofKeys ( nameToRole , Role :: isEnabled ). toSet ();
}
Beroperasi pada pasangan nilai kunci:
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 ();
}
Perbedaan berpasangan:
DoubleStreamEx . of ( input ). pairMap (( a , b ) -> b - a ). toArray ();
Dukungan untuk tipe byte/char/short/float:
short [] multiply ( short [] src , short multiplier ) {
return IntStreamEx . of ( src ). map ( x -> x * multiplier ). toShortArray ();
}
Tentukan operasi perantara malas khusus secara rekursif:
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 ));
}
Dan banyak lagi!
Proyek ini dilisensikan di bawah Lisensi Apache, versi 2.0
Rilis tersedia di Maven Central
Sebelum memperbarui StreamEx, periksa catatan migrasi dan daftar lengkap perubahan.
Tambahkan cuplikan ini ke bagian dependencies
pom.xml proyek Anda:
< dependency >
< groupId >one.util</ groupId >
< artifactId >streamex</ artifactId >
< version >0.8.3</ version >
</ dependency >
Tambahkan cuplikan ini ke bagian dependencies
build.gradle proyek Anda:
implementation ' one.util:streamex:0.8.3 '
Permintaan tarik dipersilakan.