Java8的Lambda遍历两个List匹配数据方式

网友投稿 279 2022-10-25

Java8的Lambda遍历两个List匹配数据方式

目录Lambda遍历两个List匹配数据1.定义一个静态方法2.Main方法测试3.输出结果jdk1.8的stream对两个List遍历匹配数据的处理

Lambda遍历两个List匹配数据

1. 定义一个静态方法

/**

* 通过遍历两个List中按id属性相等的归结到resultList中

* @param oneList

* @param twoList

*/

public static List> compareListHitData(List> oneList, List> twoList) {

List> resultList = oneList.stream().map(map -> twoList.stream()

.filter(m -> Objects.equals(m.get("id"), map.get("id")))

.findFirst().map(m -> {

map.putAll(m);

return map;

}).orElse(null))

.filter(Objects::nonNull).collect(Collectors.toList());

return resultList;

}

2. Main方法测试

public static void main(String[] args) {

List> oneList = new ArrayList<>();

Map oneMap = new HashMap<>();

oneMap.put("id", 111);

oneMap.put("userName", "何金荣");

Map twoMap = new HashMap<>();

twoMap.put("id", 222);

twoMap.put("userName", "Hejinrong");

oneList.add(oneMap);

oneList.add(twoMap);

List> twoList = new ArrayList<>();

Map threeMap = new HashMap<>();

threeMap.put("id", 111);

threeMap.put("userName", "何金荣");

Map fourMap = new HashMap<>();

fourMap.put("id", 333);

fourMap.put("userName", "Hejinrong");

twoList.add(threeMap);

twoList.add(fourMap);

List> resultList = compareListHitData(oneList, twoList);

System.out.println(resultList);

}

3. 输出结果

jdk1.8的stream对两个List遍历匹配数据的处理

import java.util.ArrayList;

import java.util.List;

import java.util.Objects;

import java.util.stream.Collectors;

public class testStream {

public static void main(String[] args) {

List prizeRecords = new ArrayList(6);

List stockDTOList = new ArrayList();

for (int i = 0; i < 6; i++) {

AwardInfo AwardInfo = new AwardInfo();

AwardInfo.setStockNo((i+1)+"");

prizeRecords.add(AwardInfo);

}

for (int i = 0; i < 3; i++) {

StockInfo stockDTO = new StockInfo();

stockDTO.setStockNo((i+1)+"");

stockDTO.setThirdStockNo("third"+(i+1));

stockDTOList.add(stockDTO);

}

StockInfo stockDTO1 = new StockInfo();

stockDTO1.setStockNo((44)+"");

stockDTO1.setThirdStockNo("third"+44);

stockDTOList.add(stockDTO1);

StockInfo stockDTO2 = new StockInfo();

stockDTO2.setStockNo((55)+"");

stockDTO2.setThirdStockNo("third"+55);

stockDTOList.add(stockDTO2);

//prizeRecords与stockDTOList求差集

List resultList1 = prizeRecords.stream()

.map(map -> stockDTOList.stream()

.filter(m -> !Objects.equals(m.getStockNo(), map.getStockNo()))

.findFirst().map(m -> {

return map;

}).orElse(null))

.filter(Objects::nonNull).collect(Collectors.toList());

/**

* 求差集:失败结果参考

* [AwardInfo{userId='null', stockNo='1', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='2', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='3', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='4', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='5', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='6', thirdStockNo='null'}]

*/

System.out.println(resultList1.toString());

/* List list2 = prizeRecords.stream()

.filter(map -> stockDTOList.stream().anyMatch(map1 -> map.getStockNo().equals(map1.getStockNo())))

.forEach(map -> {

map.setThirdStockNo(map1.getThirdStockNo());

});*/

List resultList2 = prizeRecords.stream().map(m->{

stockDTOList.stream().filter(m2->Objects.equals(m.getStockNo(), m2.getStockNo()))

.forEach(s-> m.setThirdStockNo(s.getThirdStockNo()));

return m;

}).collect(Collectors.toList());

/**

* stockNo=4,5,6的结果没去掉!

* [AwardInfo{userId='null', stockNo='1', thirdStockNo='third1'},

* AwardInfo{userId='null', stockNo='2', thirdStockNo='third2'},

* AwardInfo{userId='null', stockNo='3', thirdStockNo='third3'},

* AwardInfo{userId='null', stockNo='4', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='5', thirdStockNo='null'},

* AwardInfo{userId='null', stockNo='6', thirdStockNo='null'}]

*/

System.out.println(resultList2.toString());

List list3 = prizeRecords.stream()

.map(map -> stockDTOList.stream()

.filter(m -> Objects.equals(m.getStockNo(), map.getStockNo()))

.findFirst().map(m -> {

map.setThirdStockNo(m.getThttp://hirdStockNo());

return map;

npLUUZq }).orElse(null))

.filter(Objects::nonNull).collect(Collectors.toList());

/**

* stockNo=4,5,6的结果已去掉

* [AwardInfo{userId='null', stockNo='1', thirdStockNo='third1'},

* AwardInfo{userId='null', stockNo='2', thirdStockNo='third2'},

* AwardInfo{userId='null', stockNo='3', thirdStockNo='third3'}]

*/

System.out.println(list3.toString());

}

static class StockInfo{

private String stockNo;

private String stockName;

private String thirdStockNo;

public String getStockNo() {

return stockNo;

}

public void setStockNo(String stockNo) {

this.stockNo = stockNo;

}

public String getStockName() {

return stockName;

}

public void setStockName(String stockName) {

this.stockName = stockName;

}

public String getThirdStockNo() {

return thirdStockNo;

}

public void setThirdStockNo(String thirdStockNo) {

this.thirdStockNo = thirdStockNo;

}

@Override

public String toString() {

return "StockInfo{" +

"stockNo='" + stockNo + '\'' +

", stockName='" + stockName + '\'' +

", thirdStockNo='" + thirdStockNo + '\'' +

'}';

}

}

static class AwardInfo{

privhttp://ate String userId;

private String stockNo;

private String thirdStockNo;

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public String getStockNo() {

return stockNo;

}

public void setStockNo(String stockNo) {

this.stockNo = stockNo;

}

public String getThirdStockNo() {

return thirdStockNo;

}

public void setThirdStockNo(String thirdStockNo) {

this.thirdStockNo = thirdStockNo;

}

@Override

public String toString() {

return "AwardInfo{" +

"userId='" + userId + '\'' +

", stockNo='" + stockNo + '\'' +

", thirdStockNo='" + thirdStockNo + '\'' +

'}';

}

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能
下一篇:Docker安装nacos
相关文章

 发表评论

暂时没有评论,来抢沙发吧~