3 回答

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
根據(jù)您的描述,fullList 中應(yīng)該有 4 個(gè)列表(第 1 個(gè) III 和組合、第 2 個(gè) IV 和組合、第 3 個(gè) II 和國(guó)內(nèi)、第 4 個(gè) IV 和國(guó)內(nèi))我假設(shè)您正在尋找這個(gè):
Function<Target, List<String>> riskLevelAndLocation = t -> List.of(t.getRiskLevel(), t.getLocation());
Map<List<String>, List<Target>> fullList = ucrtargetList.stream()
.collect(Collectors.groupingBy(riskLevelAndLocation));
riskLevelAndLocation是 a Function,它返回一個(gè)List包含riskLeveland location。groupingBy一個(gè)List作品因?yàn)長(zhǎng)ist.equals(Object o)
返回true當(dāng)且僅當(dāng)該指定的對(duì)象也是一個(gè)列表,兩個(gè)列表具有相同的大小,并且在兩個(gè)列表元素的所有相應(yīng)的對(duì)是相等。
快速檢查:
for (Entry<List<String>, List<Target>> entrySet : fullList.entrySet()) {
System.out.println(entrySet.getKey().toString() + ": " + entrySet.getValue().size());
}
輸出是:
[IV, Combined]: 3
[II, Domestic]: 1
[III, Combined]: 4
[IV, Domestic]: 4
如果fullList必須具有您描述的順序,那么您可以使用 aLinkedHashMap并對(duì)其進(jìn)行排序。

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊
還不能發(fā)表評(píng)論,所以添加一個(gè)答案,以擴(kuò)展@Schedu Luca 的回答,'groupingBy' 子句可以鏈接起來,像這樣
Map<String, List<Target>> collect = ucrtargetList.stream() .collect(Collectors.groupingBy(Target::getRisklevel, Collectors.groupingBy(Target::getLocation)));

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
List<List<Target>> fullList = ucrtargetList.stream() .collect(Collectors.groupingBy(Target::getRisklevel)) // Or another collector .entrySet() .stream() .map(Map.Entry::getValue) .collect(Collectors.toList());
如果要從結(jié)果中刪除相同的對(duì)象,則需要添加方法 'equals' 和 'hashcode' 并收集到 Set。
添加回答
舉報(bào)