Verbesserung der Java Stream API.
Diese Bibliothek definiert vier Klassen: StreamEx
, IntStreamEx
, LongStreamEx
und DoubleStreamEx
, die vollständig mit den Java 8-Stream-Klassen kompatibel sind und viele nützliche zusätzliche Methoden bereitstellen. Außerdem wird die EntryStream
-Klasse bereitgestellt, die einen Stream von Karteneinträgen darstellt und zusätzliche Funktionalität für diesen Fall bereitstellt. Schließlich gibt es einige nützliche neue Kollektoren, die in der MoreCollectors
-Klasse definiert sind, sowie das Konzept der primitiven Kollektoren.
Die vollständige API-Dokumentation finden Sie hier.
Werfen Sie einen Blick auf das Cheatsheet für eine kurze Einführung in StreamEx!
Überprüfen Sie vor dem Aktualisieren von StreamEx die Migrationshinweise und die vollständige Liste der Änderungen.
Die Hauptpunkte von StreamEx sind die folgenden:
Collector-Verknüpfungsmethoden (toList, toSet, groupingBy, Joining usw.)
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"
Auswählen von Stream-Elementen eines bestimmten Typs
public List < Element > elementsOf ( NodeList nodeList ) {
return IntStreamEx . range ( nodeList . getLength ())
. mapToObj ( nodeList :: item ). select ( Element . class ). toList ();
}
Elemente zu einem Stream hinzufügen
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 ();
}
Entfernen unerwünschter Elemente und Verwenden eines Streams als 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 ());
}
}
Auswählen von Kartenschlüsseln nach Wertprädikat:
Map < String , Role > nameToRole ;
public Set < String > getEnabledRoleNames () {
return StreamEx . ofKeys ( nameToRole , Role :: isEnabled ). toSet ();
}
Arbeiten mit Schlüssel-Wert-Paaren:
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 ();
}
Paarweise Unterschiede:
DoubleStreamEx . of ( input ). pairMap (( a , b ) -> b - a ). toArray ();
Unterstützung für Byte-/Char-/Short-/Float-Typen:
short [] multiply ( short [] src , short multiplier ) {
return IntStreamEx . of ( src ). map ( x -> x * multiplier ). toShortArray ();
}
Definieren Sie eine benutzerdefinierte Lazy-Intermediate-Operation rekursiv:
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 ));
}
Und mehr!
Dieses Projekt ist unter der Apache-Lizenz, Version 2.0, lizenziert
Veröffentlichungen sind in Maven Central verfügbar
Überprüfen Sie vor dem Aktualisieren von StreamEx die Migrationshinweise und die vollständige Liste der Änderungen.
Fügen Sie dieses Snippet zum pom.xml- dependencies
Ihres Projekts hinzu:
< dependency >
< groupId >one.util</ groupId >
< artifactId >streamex</ artifactId >
< version >0.8.3</ version >
</ dependency >
Fügen Sie dieses Snippet zum Abschnitt „build.gradle- dependencies
Ihres Projekts hinzu:
implementation ' one.util:streamex:0.8.3 '
Pull-Anfragen sind willkommen.