Java 8 Stream API toMap Umstellung auf TreeMap
public class Message {
private int id;
private User sender;
private User receiver;
private String text;
private Date senddate;
..
}
Habe ich
List<Message> list= new ArrayList<>();
Ich brauche umzuwandeln
TreeMap<User,List<Message>> map
Ich weiß, wie zu tun, zu transformieren, um HashMap mit
list.stream().collect(Collectors.groupingBy(Message::getSender));
Aber ich brauche TreeMap mit:
Key - User mit den neuesten Nachrichten senddate ersten
Wert - Liste sortiert nach senddate neueste zuerst
Teil der User Klasse
public class User{
...
private List<Message> sendMessages;
...
public List<Message> getSendMessages() {
return sendMessages;
}
}
Benutzer Komparator:
public class Usercomparator implements Comparator<User> {
@Override
public int compare(User o1, User o2) {
return o2.getSendMessages().stream()
.map(message -> message.getSenddate())
.max(Date::compareTo).get()
.compareTo(o1.getSendMessages().stream()
.map(message1 -> message1.getSenddate())
.max(Date::compareTo).get());
}
}
- Sie planen Schlüssel
User
. Funktioniert dieser Klasse implementierenComparable<User>
? Wenn nicht, wie willst du Sie vergleichen? - Könntest du deinen post
User
Klasse? Auch, ein Beispiel für die Eingabe / Ausgabe? - Ich fügte hinzu, ein Teil der User-Klasse und compatator
- Auch, ein Beispiel für die Eingabe / Ausgabe-denn es ist nicht klar, was Sie wollen, hier zu tun. Bitte erweitern.
- Als Anmerkung:
Comparator<Message> byDate=Comparator.comparing(Message::getSenddate); Comparator<User> userComparator=Comparator.comparing(user -> Collections.max(user.getSendMessages(), byDate), byDate);
...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie überlastet
groupingBy
- Methode auf und übergebenTreeMap
alsLieferant
:Wenn deine Liste sortiert ist, dann verwenden Sie einfach diesen code für sortiert anzeigen.