java8 集合流式操作


一. 基本概念
1.1 什么是流
     不是集合,不是數據結構,不保存數據,它類似於 Iterator,對數據進行並行或者串行遍歷,然后對數據進行一系列計算、過濾等操作,最終得到結果。
 
1.2 為什么加入集合的流式操作
  • 更容易對集合進行一系列的操作:如過濾、轉換、統計等
  • 可以並行的對集合進行操作,速度更快
  • 配合lambda使用可讀性更強,代碼更加簡潔

二. 集合操作分類:中間操作 和 最終操作

 2.1 中間操作( intermediate,可以連續多個 )
filter(): 對元素進行過濾
sorted():對元素排序
map():元素映射
distinct():去除重復的元素
  
        List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ;
    
//      List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList());
        //集合數據按照條件進行過濾,不符合條件的直接扔掉
        list.stream().filter((k)-> k%2==0).forEach(System.out::println );
        //對數據進行排序,也可以使用 lambda自定義函數排序
        list.stream().sorted().forEach(System.out::println );
                //對所有數據進行統一的計算,得到一個新的集合
        list.stream().map(  k->k+10 ).forEach(System.out::println );
        //對集合中數據 去重
        list.stream().distinct(  ).forEach(System.out::println );

 

2.2 最終操作( terminal ,只能有一個)
 
  • forEach():遍歷每個元素。
  • reduce():把Stream 元素數據整合然后統計。例如,字符串拼接,數值的 sum,min,max ,average 都是特殊的 reduce。
  • collect():返回一個新的集合。
  • min():找到最小值。
  • max():找到最大值。
三、函數操作實例
3.1 構建stream對象
// 1. Individual values
Stream stream = Stream.of("a", "b", "c");
// 2. Arrays
String [] strArray = new String[] {"a", "b", "c"};
stream = Stream.of(strArray);
stream = Arrays.stream(strArray);
// 3. Collections
List<String> list = Arrays.asList(strArray);
stream = list.stream();

 3.2 基礎的操作實例

        List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ;
//      List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList());
        //對集合數據進行 加減乘,得到最后的結果
        Integer result = list.stream().reduce((a,b)->a+b  ).get();
        System.out.println( result );
        //返回集合set
        HashSet<Integer> set1 = list.stream().collect( Collectors.toCollection( ( )->{return new HashSet<>();  }) );
        System.out.println( set1 );

 
        //獲取列表中的最大值
        Integer maxVal =  list.stream().max((x,y)->{
           return x>y?1:-1;
        }).get();
        System.out.println( maxVal );

 

 

四、參考
 
 
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM