14
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));

しかし、次の TreeMap が必要です。

ユーザークラスの一部

    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());
        }
    }
4

2 に答える 2

35

オーバーロードされたメソッドを使用して、次のようgroupingByに渡すことができます。TreeMapSupplier

TreeMap<User, List<Message>> map = list
            .stream()
            .collect(Collectors.groupingBy(Message::getSender,
                    () -> new TreeMap<>(new Usercomparator()), toList()));
于 2016-01-31T18:05:41.727 に答える