Lambda遍历两个List匹配数据
1. 定义一个静态方法
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * 通过遍历两个List中按id属性相等的归结到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方法测试
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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. 输出结果
jdk1.8的stream对两个List遍历匹配数据的处理
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
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()); /** * 求差集:失败结果参考 * [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的结果没去掉! * [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的结果已去掉 * [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 + '\ '' + '}' ; } } } |
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
原文链接:https://blog.csdn.net/IT_hejinrong/article/details/89005790
查看更多关于Java8的Lambda遍历两个List匹配数据方式的详细内容...