Согласно вашему описанию в fullList должно быть 4 списка (1-й III и комбинированный, 2-й IV и комбинированный, 3-й II и внутренний, 4-й IV и внутренний) Я предполагаю, что вы ищете это:
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
- это Function
, который повторяет List
, содержащий riskLevel
и location
.groupingBy
a List
работает, потому что List.equals(Object o)
Возвращает true
тогда и только тогда, когда указанный объект также является списком, оба списка имеют одинаковый размер и все соответствующие пары элементовв двух списках равно .
Быстрая проверка:
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
должен иметь порядок, который вы описали, тогда вы можете использовать LinkedHashMap
и отсортировать его.