Как отсортировать список по времени

У меня список ArrayList <String, LocalTime>. Его нужно отсортировать по времени. Как это можно изящно реализовать? У меня получалось только через несколько десятков строк и 3 цикла. Уверен, что можно как-то стримом, но не могу сообразить как. список


Ответы (1 шт):

Автор решения: insolor

Предположим, есть класс Pair, в котором попарно хранится текст и время, что-то типа такого:

class Pair {
    private final String name;
    private final LocalTime time;

    public Pair(String name, LocalTime time) {
        this.name = name;
        this.time = time;
    }

    public String getName() {
        return name;
    }

    public LocalTime getTime() {
        return time;
    }

    public String toString() {
        return String.format("%s %s", name, time);
    }
}

Тогда для сортировки массива ArrayList<Pair> arrayList по полю time нужна такая конструкция:

List<Pair> result = arrayList.stream()
        .sorted(Comparator.comparing(Pair::getTime))
        .collect(Collectors.toList());

Более полный пример кода:

List<Pair> arrayList = Arrays.asList(
        new Pair("dfgre", LocalTime.of(2,30)),
        new Pair("rthrth", LocalTime.of(10,1)),
        new Pair("ntyht", LocalTime.of(5,12)),
        new Pair("sdfsdf", LocalTime.of(0,0))
);

List<Pair> result = arrayList.stream()
        .sorted(Comparator.comparing(Pair::getTime))
        .collect(Collectors.toList());

System.out.println(result);

Вывод:

[sdfsdf 00:00, dfgre 02:30, ntyht 05:12, rthrth 10:01]
→ Ссылка