Java基礎系列:stream

1 簡介

stream是Java中的臨時迭代器,用於數據處理.

  • 特點
序號 描述
1 單向,不可往復
2 數據只能遍歷一次,完成遍歷後即銷燬
3 並行化操作(與普通迭代器只能串行化操作不同)
  • 方法
序號 方法 描述
forEach 遍歷
map 映射數據
filter 過濾
limit 獲取指定數量的數據
sorted 數據排序

2 Usage

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;
  • 實體
package basic.datatype.po;

public class Infos{
    private String name;
    private String address;
    private String score;

    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }

    public void setAddress(String address){
        this.address = address;
    }
    public String getAddress(){
        return address;
    }

    public void setScore(String score){
        this.score = score;
    }
    public String getScore(){
        return score;
    }
    public Infos(){}
    public Infos(String name, String address, String score){
        this.name = name;
        this.address = address;
        this.score = score;
    }
}

2.1 創建流

  • 串行流
List<String> datas = Arrays.asList("xiaoxiao","xiaohua");
datas.stream();
  • 並行流
List<String> datas = Arrays.asList("xiaoxiao","xiaohua");
datas.parallelStream();

2.2 遍歷

package basic.datatype.dataformat;

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;

public class LambdaExpressionTest implements InterfaceTest{

    public String baseLambda(List datasLis){
        datasLis.forEach(s -> System.out.println(s));
        return "lambda test";
    }
    public static void main(String[] args){
        LambdaExpressionTest lTest = new LambdaExpressionTest();
        lTest.getName();
        List datasLis = Arrays.asList("xiaoxiao", "xiaohei", "xiaohua");
        lTest.baseLambda(datasLis);
    }
}

2.3 映射

package basic.datatype.dataformat;

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;

public class LambdaExpressionTest implements InterfaceTest{

    public List infosLiIteratorByLambda(List<Infos> infosLis){
        infosLis.stream().forEach(x->System.out.println(x.getName()));
        infosLis.stream().map(Infos::getName).collect(Collectors.toList());
        return infosLis;
    }
   
    public static void main(String[] args){
        LambdaExpressionTest lTest = new LambdaExpressionTest();
        lTest.getName();
        List<Infos> infosLis = new ArrayList<>();
        infosLis.add(new Infos("xiaohua", "shenzhen", "080"));
        infosLis.add(new Infos("xiaoxiao", "shenzhen", "100"));
        infosLis.add(new Infos("xiaohei", "shenzhen", "090"));
        lTest.infosLiIteratorByLambda(infosLis);
      
    }
    
}

2.4 過濾

package basic.datatype.dataformat;

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;

public class LambdaExpressionTest implements InterfaceTest{
    public List<Infos> infosLiFilterByLambda(List<Infos> infosLis){
        List<Infos> resLis = infosLis.stream().filter(datas -> datas.getName().length()>7).collect(Collectors.toList());
        return resLis;
    }
    public static void main(String[] args){
        LambdaExpressionTest lTest = new LambdaExpressionTest();
        lTest.getName();
        List<Infos> infosLis = new ArrayList<>();
        infosLis.add(new Infos("xiaohua", "shenzhen", "080"));
        infosLis.add(new Infos("xiaoxiao", "shenzhen", "100"));
        infosLis.add(new Infos("xiaoheihei", "shenzhen", "090"));
        List<Infos> filterInfos = lTest.infosLiFilterByLambda(infosLis);
        System.out.println("filter:"+filterInfos.stream().map(Infos::getName).collect(Collectors.toList()));
    }
    
}

2.5 數量限制

package basic.datatype.dataformat;

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;

public class LambdaExpressionTest implements InterfaceTest{

    public List<Infos> infosLiLimitByLambda(List<Infos> infosLis, Integer limit){
        List<Infos> resLis = infosLis.stream().limit(limit).collect(Collectors.toList());
        return resLis;
    }
    
    public static void main(String[] args){
        LambdaExpressionTest lTest = new LambdaExpressionTest();
   
        List<Infos> infosLis = new ArrayList<>();
        infosLis.add(new Infos("xiaohua", "shenzhen", "080"));
        infosLis.add(new Infos("xiaoxiao", "shenzhen", "100"));
        infosLis.add(new Infos("xiaoheihei", "shenzhen", "090"));
        List<Infos> limitInfos = lTest.infosLiLimitByLambda(infosLis,1);
        System.out.println("filter:"+limitInfos.stream().map(Infos::getName).collect(Collectors.toList()));
    }
    
}

2.6 排序

  • 字符串排序
package basic.datatype.dataformat;

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;

public class LambdaExpressionTest implements InterfaceTest{

    public List<Infos> infosLiSortedByLambda(List<Infos> infosLis){
        List<Infos> resLis = infosLis.stream().sorted(Comparator.comparing(Infos::getName)).collect(Collectors.toList());
        return resLis;
    }

    public static void main(String[] args){
        LambdaExpressionTest lTest = new LambdaExpressionTest();
        List<Infos> infosLis = new ArrayList<>();
        infosLis.add(new Infos("xiaohua", "shenzhen", "080"));
        infosLis.add(new Infos("xiaoxiao", "shenzhen", "100"));
        infosLis.add(new Infos("xiaoheihei", "shenzhen", "090"));
        List<Infos> sortedInfos = lTest.infosLiSortedByLambda(infosLis);
        System.out.println("filter:"+sortedInfos.stream().map(Infos::getName).collect(Collectors.toList()));

    }
    
}
  • 數值排序
package basic.datatype.dataformat;

import basic.datatype.po.Infos;
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
import java.util.function.Consumer;
import java.util.Map;

public class LambdaExpressionTest implements InterfaceTest{

    public List<Infos> infosLiSortedByLambda(List<Infos> infosLis){
        List<Infos> resLis = infosLis.stream().sorted((i1,i2)->(i1.getAge()-i2.getAge())).collect(Collectors.toList());
        return resLis;
    }

    public static void main(String[] args){
        LambdaExpressionTest lTest = new LambdaExpressionTest();
        List<Infos> infosLis = new ArrayList<>();
        infosLis.add(new Infos("xiaohua", "shenzhen", "080"));
        infosLis.add(new Infos("xiaoxiao", "shenzhen", "100"));
        infosLis.add(new Infos("xiaoheihei", "shenzhen", "090"));
        List<Infos> sortedInfos = lTest.infosLiSortedByLambda(infosLis);
        System.out.println("filter:"+sortedInfos.stream().map(Infos::getName).collect(Collectors.toList()));

    }
    
}

【參考文獻】
[1]https://blog.csdn.net/qq_20989105/article/details/81234175
[2]https://www.runoob.com/java/java8-streams.html
[3]https://www.cnblogs.com/coprince/p/8692972.html
[4]https://blog.csdn.net/qq_37176126/article/details/81273195

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章