У меня есть sortedList из типа "Details", который имеет следующее содержимое:
[0]=Details test0: 28.01.2020
[0]=Details test1: 1234
[0]=Details test2: abcd
[0]=Details test3: 1
[0]=Details test4: 20.6
[0]=Details test5: 20.20
[1]=Details test0: 28.01.2020
[1]=Details test1: 1234
[1]=Details test2: abcd
[1]=Details test3: 1
[1]=Details test4: 20.6
[1]=Details test5: 20.20
[2]=Details test0: 29.01.2020
[2]=Details test1: 1234
[2]=Details test2: abcd
[2]=Details test3: 1
[2]=Details test4: 20.7
[2]=Details test5: 20.20
Теперь отсортированный список возвращает все эти объекты, но я хочу суммировать все с тем же test0, test1, test2 и сумма test3, test4 и test5 (test3 + test3, test4 + test4 и test5 + test5):
[0]=Details test0: 28.01.2020
[0]=Details test1: 1234
[0]=Details test2: abcd
[0]=Details test3: 2
[0]=Details test4: 41.2
[0]=Details test2: 40.40
[1]=Details test0: 29.01.2020
[1]=Details test1: 1234
[1]=Details test2: abcd
[1]=Details test3: 1
[1]=Details test4: 2.7
[1]=Details test5: 20.20
Я не уверен, является ли list.stream().filter
лучшим вариантом для этой проблемы. Любые идеи? два метода, которые должны найти все дубликаты test0:
public static List<Detail> getDuplicates(final List<Detail> list) {
return getDuplicatesMap(list).values()
.stream()
.filter(duplicates -> duplicates.size() > 1)
.flatMap(Collection::stream)
.collect(Collectors.toList());
}
private static Map<String, List<Details>> getDuplicatesMap(List<Details> list) {
return list.stream().collect(Collectors.groupingBy(Details::test0));
}