Код в вопросе не работает, потому что метод compare
нарушает правила, например,
Разработчик также должен убедиться, что отношение транзитивно: ((compare(x, y)>0) && (compare(y, z)>0))
подразумевает compare(x, z)>0
.
Например:
compare(A1, B2)
вернет <0, потому что <code>A != B && 1 < 2
compare(B2, A3)
вернет <0, потому что <code>B != A && 2 < 3
compare(A1, A3)
вернул бы 0, потому что A == A
, но правила требуют, чтобы он возвратил <0 </p>
Когда правила нарушены, результат является недетерминированным.
Для построенияколлекция ParseMessage
, содержащая только самое последнее сообщение от каждого контакта, вы должны создать Map
.
List<ParseMessage> cntct = /*...*/;
// Build map of contact to most recent message
Map<String, ParseMessage> cntctMap = cntct.stream().collect(Collectors.toMap(
ParseMessage::getContact,
Function.identity(),
(a, b) -> a.getDateSent() >= b.getDateSent() ? a : b
));
Если требуется коллекция сообщений, вызовите значения ():
Collection<ParseMessage> cntctList = cntctMap.values();