Как отсортировать список по времени
У меня список 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]