У меня есть два класса:Java 8 Список к карте с потоком (во избежание дубликатов)
public class Adegae implements java.io.Serializable {
private AdegaeId id;
...
}
и
public class AdegaeId implements java.io.Serializable {
private String gpi;
private String mccode;
private String aecode;
...
}
У меня также есть список, которые имеют элементы с duplaicates из aecode
:
List<Adegae> adegaes = ...
Я строю свою карту так:
Map<String, Adegae> adegaeMap = adegaes.stream()
.collect(Collectors.toMap(adegae -> adegae.getId().getAecode().trim(),
Function.identity()));
Когда я запускаю мой код, я получаю это исключение:
java.lang.IllegalStateException: Duplicate key [email protected]
at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
at java.util.HashMap.merge(HashMap.java:1245)
at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
Интересно, если есть способ, чтобы собрать на карту, понижая дубликаты в то же время.
Да, вы должны предоставить mergeFunction в качестве 3-го параметра. См. Связанный вопрос. – Tunaki
Вы измените adeges из списка в Set (Set avoid duplicates), можете сделать что-то вроде: List list = ... Set set = new HashSet (список); –
@ DanielHernández Trickier, поскольку дубликаты - это не сам объект, а свойство объектов. – Tunaki