一、遍历(forEach)和筛选(Filter)
list. stream ( ) . filter ( l -> l > 5 ) . forEach ( System . out:: println ) ;
二、匹配(find/match)
Optional < Integer > findFirst = list. stream ( ) . filter ( l -> l > 5 ) . findFirst ( ) ;
Optional < Integer > findAny = list. parallelStream ( ) . filter ( l -> l > 6 ) . findAny ( ) ;
boolean anyMatch = list. stream ( ) . anyMatch ( l -> l > 6 ) ;
三、聚合(max/min/count)
List < String > list = Arrays . asList ( "adnm" , "admmt" , "pot" , "xbangd" , "weoujgsd" ) ;
Optional < String > max = list. stream ( ) . max ( Comparator . comparing ( String :: length ) ) ;
Optional < String > min = list. stream ( ) . min ( Comparator . comparing ( String :: length ) ) ;
System . out. println ( "最长的字符串:" + max. get ( ) ) ;
System . out. println ( "最短的字符串:" + min. get ( ) ) ;
List < Integer > list = Arrays . asList ( 7 , 6 , 9 , 4 , 11 , 5 ) ;
long count = list. stream ( ) . filter ( x -> x > 5 ) . count ( ) ;
System . out. println ( "list中大于5的元素个数:" + count) ;
四、映射(map、flatMap)
一对一的转化用map
String [ ] strArr = { "abcd" , "bcdd" , "defde" , "fTr" } ;
List < String > strList = Arrays . stream ( strArr) . map ( String :: toUpperCase ) . collect ( Collectors . toList ( ) ) ;
一对多的转化用flatMap
List < String > list = Arrays . asList ( "m,k,l,a" , "1,3,5,7" ) ;
List < String > listNew = list. stream ( ) . flatMap ( s -> {
String [ ] split = s. split ( "," ) ;
Stream < String > s2 = Arrays . stream ( split) ;
return s2;
} ) . collect ( Collectors . toList ( ) ) ;
五、归约(reduce)
List < Integer > list = Arrays . asList ( 1 , 3 , 2 , 8 , 11 , 4 ) ;
Optional < Integer > sum = list. stream ( ) . reduce ( ( x, y) -> x + y) ;
Optional < Integer > sum2 = list. stream ( ) . reduce ( Integer :: sum ) ;
Integer sum3 = list. stream ( ) . reduce ( 0 , Integer :: sum ) ;
Optional < Integer > product = list. stream ( ) . reduce ( ( x, y) -> x * y) ;
Optional < Integer > max = list. stream ( ) . reduce ( ( x, y) -> x > y ? x : y) ;
Optional < Integer > max1= list. stream ( ) . reduce ( Integer :: max ) ;
Integer max2 = list. stream ( ) . reduce ( 0 , Integer :: max ) ;
六、收集(collect)
6.1归集(toList/toSet/toMap)
List < Integer > list = Arrays . asList ( 1 , 6 , 3 , 4 , 6 , 7 , 9 , 6 , 20 ) ;
List < Integer > listNew = list. stream ( ) . filter ( x -> x % 2 == 0 ) . collect ( Collectors . toList ( ) ) ;
Set < Integer > set = list. stream ( ) . filter ( x -> x % 2 == 0 ) . collect ( Collectors . toSet ( ) ) ;
List < Person > personList = new ArrayList < Person > ( ) ;
personList. add ( new Person ( "Tom" , 8900 , 23 , "male" , "New York" ) ) ;
personList. add ( new Person ( "Jack" , 7000 , 25 , "male" , "Washington" ) ) ;
personList. add ( new Person ( "Lily" , 7800 , 21 , "female" , "Washington" ) ) ;
personList. add ( new Person ( "Anni" , 8200 , 24 , "female" , "New York" ) ) ;
Map < ? , Person > map = personList. stream ( ) . filter ( p -> p. getSalary ( ) > 8000 ) . collect ( Collectors . toMap ( Person :: getName , p -> p) ) ;
6.2统计(count/averaging)
List < Person > personList = new ArrayList < Person > ( ) ;
personList. add ( new Person ( "Tom" , 8900 , 23 , "male" , "New York" ) ) ;
personList. add ( new Person ( "Jack" , 7000 , 25 , "male" , "Washington" ) ) ;
personList. add ( new Person ( "Lily" , 7800 , 21 , "female" , "Washington" ) ) ;
Long count = personList. stream ( ) . collect ( Collectors . counting ( ) ) ;
long count1 = personList. stream ( ) . count ( ) ;
Double average = personList. stream ( ) . collect ( Collectors . averagingDouble ( Person :: getSalary ) ) ;
Integer sumSalary = personList. stream ( ) . map ( Person :: getSalary ) . reduce ( 0 , Integer :: sum ) ;
long average1 = sumSalary / count1;
Optional < Integer > max = personList. stream ( ) . map ( Person :: getSalary ) . collect ( Collectors . maxBy ( Integer :: compare ) ) ;
Integer max1 = personList. stream ( ) . map ( Person :: getSalary ) . reduce ( 0 , Integer :: max ) ;
Integer sum = personList. stream ( ) . collect ( Collectors . summingInt ( Person :: getSalary ) ) ;
DoubleSummaryStatistics collect = personList. stream ( ) . collect ( Collectors . summarizingDouble ( Person :: getSalary ) ) ;
6.3分组(partitioningBy/groupingBy)
personList. add ( new Person ( "Tom" , 8900 , 23 , "male" , "New York" ) ) ;
personList. add ( new Person ( "Jack" , 7000 , 25 , "male" , "Washington" ) ) ;
personList. add ( new Person ( "Lily" , 7800 , 21 , "female" , "Washington" ) ) ;
personList. add ( new Person ( "Anni" , 8200 , 24 , "female" , "New York" ) ) ;
Map < String , List < Person > > sexGroup = personList. stream ( ) . collect ( Collectors . groupingBy ( Person :: getSex ) ) ;
Map < String , Map < String , List < Person > > > areaGroup = personList. stream ( ) . collect ( Collectors . groupingBy ( Person :: getSex , Collectors . groupingBy ( Person :: getArea ) ) ) ;
6.4接合(joining)
personList. add ( new Person ( "Lily" , 7800 , 21 , "female" , "Washington" ) ) ;
personList. add ( new Person ( "Anni" , 8200 , 24 , "female" , "New York" ) ) ;
String stringStream = personList. stream ( ) . map ( n -> n. getName ( ) ) . collect ( Collectors . joining ( "--" ) ) ;
String collect = personList. stream ( ) . map ( Person :: getSex ) . collect ( Collectors . joining ( "-" ) ) ;
6.5归约(reducing)
Collectors 类提供的reducing方法,相比于stream本身的reduce方法,增加了对自定义归约的支持。
personList. add ( new Person ( "Anni" , 8200 , "female" , "New York" ) ) ;
personList. add ( new Person ( "Owen" , 9500 , "male" , "New York" ) ) ;
Integer reduce = personList. stream ( ) . map ( Person :: getSalary ) . reduce ( 0 , Integer :: sum ) ;
Integer collect = personList. stream ( ) . collect ( Collectors . reducing ( 0 , Person :: getSalary , Integer :: sum ) ) ;
6.6排序(sorted)
personList. add ( new Person ( "Alisa" , 9200 , 22 , "female" , "New York" ) ) ;
List < String > collect = personList. stream ( ) . sorted ( Comparator . comparing ( Person :: getSalary ) ) . map ( Person :: getName ) . collect ( Collectors . toList ( ) ) ;
List < String > s = personList. stream ( ) . sorted ( Comparator . comparing ( Person :: getSalary ) . thenComparing ( Person :: getAge ) ) . map ( Person :: getName ) . collect ( Collectors . toList ( ) ) ;
List < String > c= personList. stream ( ) . sorted ( Comparator . comparing ( Person :: getSalary ) . thenComparing ( Person :: getAge ) . reversed ( ) ) . map ( Person :: getName ) . collect ( Collectors . toList ( ) ) ;
6.7提取/组合
String [ ] s1 = { "a" , "b" , "c" , "d" } ;
String [ ] s2 = { "d" , "e" , "f" , "g" } ;
Stream < String > stream1 = Stream . of ( s1) ;
Stream < String > stream2 = Stream . of ( s2) ;
List < String > newList = Stream . concat ( stream1, stream2) . distinct ( ) . collect ( Collectors . toList ( ) ) ;
List < Integer > collect = Stream . iterate ( 1 , x -> x + 2 ) . limit ( 10 ) . collect ( Collectors . toList ( ) ) ;
List < Integer > collect2 = Stream . iterate ( 1 , x -> x + 2 ) . skip ( 1 ) . limit ( 5 ) . collect ( Collectors . toList ( ) ) ;