การเพิ่มประสิทธิภาพ Java Stream API
ไลบรารีนี้กำหนดสี่คลาส: StreamEx
, IntStreamEx
, LongStreamEx
, DoubleStreamEx
ที่เข้ากันได้อย่างสมบูรณ์กับคลาสสตรีม Java 8 และมีวิธีการเพิ่มเติมที่มีประโยชน์มากมาย นอกจากนี้ยังมีการจัดเตรียมคลาส EntryStream
ซึ่งแสดงถึงสตรีมของรายการแผนที่และให้ฟังก์ชันเพิ่มเติมสำหรับกรณีนี้ สุดท้ายนี้ มีตัวสะสมใหม่ที่มีประโยชน์ซึ่งถูกกำหนดไว้ในคลาส MoreCollectors
เช่นเดียวกับแนวคิดตัวสะสมดั้งเดิม
มีเอกสารประกอบ API ฉบับเต็มอยู่ที่นี่
ดู Cheatsheet เพื่อดูข้อมูลเบื้องต้นเกี่ยวกับ 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 ();
รองรับประเภทไบต์ / ถ่าน / สั้น / ลอย:
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 ให้ตรวจสอบบันทึกการย้ายและรายการการเปลี่ยนแปลงทั้งหมด
เพิ่มตัวอย่างนี้ไปยังส่วน 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 '
ยินดีต้อนรับคำขอดึง