Java Stream API 향상.
이 라이브러리는 Java 8 스트림 클래스와 완전히 호환되고 많은 유용한 추가 메소드를 제공하는 StreamEx
, IntStreamEx
, LongStreamEx
, DoubleStreamEx
의 네 가지 클래스를 정의합니다. 또한 지도 항목의 스트림을 나타내고 이 경우에 대한 추가 기능을 제공하는 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 ();
byte/char/short/float 유형 지원:
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를 업데이트하기 전에 마이그레이션 참고 사항과 전체 변경 사항 목록을 확인하세요.
프로젝트의 pom.xml dependencies
섹션에 다음 코드 조각을 추가하세요.
< dependency >
< groupId >one.util</ groupId >
< artifactId >streamex</ artifactId >
< version >0.8.3</ version >
</ dependency >
프로젝트의 build.gradle dependencies
섹션에 이 코드 조각을 추가하세요.
implementation ' one.util:streamex:0.8.3 '
풀 요청을 환영합니다.