تعزيز Java Stream API.
تحدد هذه المكتبة أربع فئات: StreamEx
و IntStreamEx
و LongStreamEx
و DoubleStreamEx
المتوافقة تمامًا مع فئات تدفق Java 8 وتوفر العديد من الطرق الإضافية المفيدة. كما يتم توفير فئة EntryStream
التي تمثل دفقًا من إدخالات الخريطة وتوفر وظائف إضافية لهذه الحالة. أخيرًا، هناك بعض أدوات التجميع الجديدة المفيدة التي تم تعريفها في فئة MoreCollectors
بالإضافة إلى مفهوم أدوات التجميع البدائية.
وثائق API الكاملة متاحة هنا.
قم بإلقاء نظرة على ورقة الغش للحصول على مقدمة مختصرة عن StreamEx!
قبل تحديث StreamEx، تحقق من ملاحظات الترحيل والقائمة الكاملة للتغييرات.
النقاط الرئيسية لـ StreamEx هي ما يلي:
طرق اختصار المجمع (toList، toSet، groupingBy، join، إلخ.)
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 ();
دعم أنواع البايت/الشار/القصير/العائم:
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، الإصدار 2.0
الإصدارات متوفرة في Maven Central
قبل تحديث StreamEx، تحقق من ملاحظات الترحيل والقائمة الكاملة للتغييرات.
أضف هذا المقتطف إلى قسم dependencies
pom.xml الخاص بمشروعك:
< dependency >
< groupId >one.util</ groupId >
< artifactId >streamex</ artifactId >
< version >0.8.3</ version >
</ dependency >
أضف هذا المقتطف إلى قسم dependencies
build.gradle الخاص بمشروعك:
implementation ' one.util:streamex:0.8.3 '
طلبات السحب هي موضع ترحيب.