public class Message {
private int id;
private User sender;
private User receiver;
private String text;
private Date senddate;
..
}
私が持っています
List<Message> list= new ArrayList<>();
私はそれらをに変換する必要があります
TreeMap<User,List<Message>> map
を使用してHashMapに変換する方法を知っています
list.stream().collect(Collectors.groupingBy(Message::getSender));
ただし、次のツリーマップが必要です。キー-最新のメッセージを持つユーザーsenddatefirst値-senddateでソートされたリスト最新の最初
ユーザークラスの一部
public class User{
...
private List<Message> sendMessages;
...
public List<Message> getSendMessages() {
return sendMessages;
}
}
ユーザーコンパレータ:
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());
}
}
オーバーロードされた groupingBy
メソッドを使用して、TreeMap
を Supplier
として渡すことができます。
TreeMap<User, List<Message>> map = list
.stream()
.collect(Collectors.groupingBy(Message::getSender,
() -> new TreeMap<>(new Usercomparator()), toList()));
リストがソートされている場合は、このコードをソートされたマップに使用してください。
Map<String, List<WdHour>> pMonthlyDataMap = list
.stream().collect(Collectors.groupingBy(WdHour::getName, TreeMap::new, Collectors.toList()));