JAVA8stream嵌套循環並設置值
簡介:
Java 8 API添加了一個新的抽象稱爲流Stream,可以讓你以一種聲明的方式處理數據。
Stream 不存儲數據、不改變源數據
詳情請閱讀stream官網
一.測試代碼
public static void main(String[] args)throws Exception {
List<TSnipingGoodSku> intList1 = new ArrayList<>();
TSnipingGoodSku tSnipingGoodSku1 = new TSnipingGoodSku();
tSnipingGoodSku1.setSkuId(11);
TSnipingGoodSku tSnipingGoodSku2 = new TSnipingGoodSku();
tSnipingGoodSku2.setSkuId(12);
intList1.add(tSnipingGoodSku1);
intList1.add(tSnipingGoodSku2);
List<TSnipingGoodSku> intList = new ArrayList<>();
TSnipingGoodSku tSnipingGoodSku3 = new TSnipingGoodSku();
tSnipingGoodSku3.setSkuId(11);
TSnipingGoodSku tSnipingGoodSku4 = new TSnipingGoodSku();
tSnipingGoodSku4.setSkuId(13);
intList.add(tSnipingGoodSku3);
intList.add(tSnipingGoodSku4);
//找出skuId相同的對象組成集合
List<TSnipingGoodSku> tSnipingGoodSkus1 = intList.stream().filter(a1 -> intList1.stream().anyMatch(a2 ->a1.getSkuId() == a2.getSkuId())
).collect(Collectors.toList());
//打印輸出 tSnipingGoodSkus1{11}
tSnipingGoodSkus1.stream().map(TSnipingGoodSku::getSkuId).forEach(System.out::println);
//對skuId相同的對象屬性進行操作
List<TSnipingGoodSku> tSnipingGoodSkus2 = intList.parallelStream().map(a1 ->{//parallelStream :多線程異步stream
TSnipingGoodSku tSnipingGoodSku = intList1.stream().filter(a2 -> a1.getSkuId() == a2.getSkuId()).findFirst().orElse(null); //orElse 值爲空返回null防止空指針異常
if (null != tSnipingGoodSku){
a1.setSkuId(666);
}
return a1;
}).collect(Collectors.toList());
//打印輸出 tSnipingGoodSkus2{666,13}
tSnipingGoodSkus2.stream().map(TSnipingGoodSku::getSkuId).forEach(System.out::println);
}
二.實體類
public class TSnipingGoodSku {
private Integer skuId;
public Integer getSkuId() {
return skuId;
}
public void setSkuId(Integer skuId) {
this.skuId = skuId;
}