Java 8 Flux API toMap la conversion de TreeMap
public class Message {
private int id;
private User sender;
private User receiver;
private String text;
private Date senddate;
..
}
J'ai
List<Message> list= new ArrayList<>();
J'ai besoin de les transformer à
TreeMap<User,List<Message>> map
Je sais comment le faire, de se transformer en table de hachage à l'aide de
list.stream().collect(Collectors.groupingBy(Message::getSender));
Mais j'ai besoin de TreeMap avec:
La clé de l'Utilisateur avec le plus récent message senddate première
La valeur de la Liste triée par senddate nouveau premier
Part de l'Utilisateur de la classe
public class User{
...
private List<Message> sendMessages;
...
public List<Message> getSendMessages() {
return sendMessages;
}
}
Utilisateur comparateur:
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());
}
}
Vous êtes planification pour avoir la clé de type
Pourriez-vous poster votre
J'ai ajouté de la part de l'Utilisateur de la classe et compatator
Aussi, un échantillon d'entrée / de sortie, car il n'est pas clair ce que vous voulez faire ici. Merci de développer.
Comme une note de côté:
User
. Cette classe ne mettre en œuvre Comparable<User>
? Si non, comment voulez-vous comparer?Pourriez-vous poster votre
User
classe? Aussi, un échantillon d'entrée / sortie?J'ai ajouté de la part de l'Utilisateur de la classe et compatator
Aussi, un échantillon d'entrée / de sortie, car il n'est pas clair ce que vous voulez faire ici. Merci de développer.
Comme une note de côté:
Comparator<Message> byDate=Comparator.comparing(Message::getSenddate); Comparator<User> userComparator=Comparator.comparing(user -> Collections.max(user.getSendMessages(), byDate), byDate);
...OriginalL'auteur VoldemarP | 2016-01-31
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser surchargé
groupingBy
méthode et passerTreeMap
commeFournisseur
:Merci. Il fonctionne parfaitement. C'est exactement ce dont j'ai besoin.
C. mais si je veux
OriginalL'auteur Mrinal
Si votre liste est triée puis il suffit d'utiliser ce code pour triés carte.
OriginalL'auteur fjkjava