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