Java8的Lambda遍歷兩個(gè)List匹配數(shù)據(jù)方式
Lambda遍歷兩個(gè)List匹配數(shù)據(jù)
1. 定義一個(gè)靜態(tài)方法
/**
* 通過(guò)遍歷兩個(gè)List中按id屬性相等的歸結(jié)到resultList中
* @param oneList
* @param twoList
*/
public static List<Map<Object, Object>> compareListHitData(List<Map<Object, Object>> oneList, List<Map<Object, Object>> twoList) {
List<Map<Object, Object>> 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方法測(cè)試
public static void main(String[] args) {
List<Map<Object, Object>> oneList = new ArrayList<>();
Map<Object, Object> oneMap = new HashMap<>();
oneMap.put("id", 111);
oneMap.put("userName", "何金榮");
Map<Object, Object> twoMap = new HashMap<>();
twoMap.put("id", 222);
twoMap.put("userName", "Hejinrong");
oneList.add(oneMap);
oneList.add(twoMap);
List<Map<Object, Object>> twoList = new ArrayList<>();
Map<Object, Object> threeMap = new HashMap<>();
threeMap.put("id", 111);
threeMap.put("userName", "何金榮");
Map<Object, Object> fourMap = new HashMap<>();
fourMap.put("id", 333);
fourMap.put("userName", "Hejinrong");
twoList.add(threeMap);
twoList.add(fourMap);
List<Map<Object, Object>> resultList = compareListHitData(oneList, twoList);
System.out.println(resultList);
}
3. 輸出結(jié)果

jdk1.8的stream對(duì)兩個(gè)List遍歷匹配數(shù)據(jù)的處理
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<AwardInfo> prizeRecords = new ArrayList<AwardInfo>(6);
List<StockInfo> stockDTOList = new ArrayList<StockInfo>();
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<AwardInfo> 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());
/**
* 求差集:失敗結(jié)果參考
* [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<AwardInfo> list2 = prizeRecords.stream()
.filter(map -> stockDTOList.stream().anyMatch(map1 -> map.getStockNo().equals(map1.getStockNo())))
.forEach(map -> {
map.setThirdStockNo(map1.getThirdStockNo());
});*/
List<AwardInfo> 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的結(jié)果沒(méi)去掉!
* [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<AwardInfo> list3 = prizeRecords.stream()
.map(map -> stockDTOList.stream()
.filter(m -> Objects.equals(m.getStockNo(), map.getStockNo()))
.findFirst().map(m -> {
map.setThirdStockNo(m.getThirdStockNo());
return map;
}).orElse(null))
.filter(Objects::nonNull).collect(Collectors.toList());
/**
* stockNo=4,5,6的結(jié)果已去掉
* [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{
private 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 + '\'' +
'}';
}
}
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Spring Boot ApplicationRunner解析命令行中的參數(shù)
這篇文章主要介紹了使用Spring Boot ApplicationRunner解析命令行中的參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12
Mybatis使用collection標(biāo)簽進(jìn)行樹形結(jié)構(gòu)數(shù)據(jù)查詢時(shí)攜帶外部參數(shù)查詢
這篇文章主要介紹了Mybatis使用collection標(biāo)簽進(jìn)行樹形結(jié)構(gòu)數(shù)據(jù)查詢時(shí)攜帶外部參數(shù)查詢,需要的朋友可以參考下2023-10-10
Java8(291)之后禁用了TLS1.1使JDBC無(wú)法用SSL連接SqlServer2008的解決方法
這篇文章主要介紹了Java8(291)之后禁用了TLS1.1使JDBC無(wú)法用SSL連接SqlServer2008的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
SpringBoot開發(fā)存儲(chǔ)服務(wù)器實(shí)現(xiàn)過(guò)程詳解
這篇文章主要為大家介紹了SpringBoot開發(fā)存儲(chǔ)服務(wù)器實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
解決Java & Idea啟動(dòng)tomcat的中文亂碼問(wèn)題
這篇文章主要介紹了Java & Idea啟動(dòng)tomcat的中文亂碼問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Java那些鮮為人知的關(guān)鍵字volatile詳析
這篇文章主要給大家介紹了關(guān)于Java那些鮮為人知的關(guān)鍵字volatile的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
如何解決Spring in action @valid驗(yàn)證不生效的問(wèn)題
這篇文章主要介紹了如何解決Spring in action @valid驗(yàn)證不生效的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot+Vue實(shí)現(xiàn)動(dòng)態(tài)菜單的思路梳理
這篇文章主要為大家詳細(xì)介紹了利用SpringBoot+Vue實(shí)現(xiàn)動(dòng)態(tài)菜單的思路梳理,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-07-07

