Amélioration de l'API Java Stream.
Cette bibliothèque définit quatre classes : StreamEx
, IntStreamEx
, LongStreamEx
, DoubleStreamEx
qui sont entièrement compatibles avec les classes de flux Java 8 et fournissent de nombreuses méthodes supplémentaires utiles. En outre, la classe EntryStream
est fournie, qui représente un flux d'entrées de carte et fournit des fonctionnalités supplémentaires dans ce cas. Enfin, il existe de nouveaux collecteurs utiles définis dans la classe MoreCollectors
ainsi que le concept de collecteurs primitifs.
La documentation complète de l'API est disponible ici.
Jetez un œil à la feuille de triche pour une brève introduction à StreamEx !
Avant de mettre à jour StreamEx, vérifiez les notes de migration et la liste complète des modifications.
Les principaux points de StreamEx sont les suivants :
Méthodes de raccourci du collecteur (toList, toSet, groupingBy, join, etc.)
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"
Sélection d'éléments de flux d'un type spécifique
public List < Element > elementsOf ( NodeList nodeList ) {
return IntStreamEx . range ( nodeList . getLength ())
. mapToObj ( nodeList :: item ). select ( Element . class ). toList ();
}
Ajouter des éléments à un flux
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 ();
}
Suppression des éléments indésirables et utilisation d'un flux comme itérable :
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 ());
}
}
Sélection des clés de mappage par prédicat de valeur :
Map < String , Role > nameToRole ;
public Set < String > getEnabledRoleNames () {
return StreamEx . ofKeys ( nameToRole , Role :: isEnabled ). toSet ();
}
Opérant sur des paires clé-valeur :
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 ();
}
Différences par paire :
DoubleStreamEx . of ( input ). pairMap (( a , b ) -> b - a ). toArray ();
Prise en charge des types octet/char/short/float :
short [] multiply ( short [] src , short multiplier ) {
return IntStreamEx . of ( src ). map ( x -> x * multiplier ). toShortArray ();
}
Définissez une opération intermédiaire paresseuse personnalisée de manière récursive :
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 ));
}
Et bien plus encore !
Ce projet est sous licence Apache, version 2.0
Les versions sont disponibles dans Maven Central
Avant de mettre à jour StreamEx, vérifiez les notes de migration et la liste complète des modifications.
Ajoutez cet extrait à la section dependencies
pom.xml de votre projet :
< dependency >
< groupId >one.util</ groupId >
< artifactId >streamex</ artifactId >
< version >0.8.3</ version >
</ dependency >
Ajoutez cet extrait à la section dependencies
build.gradle de votre projet :
implementation ' one.util:streamex:0.8.3 '
Les demandes de tirage sont les bienvenues.