【问题标题】:Java - Sort list of list LocalTimeJava - 列表 LocalTime 的排序列表
【发布时间】:2021-06-17 01:06:01
【问题描述】:

我想用stream()List<List<LocalTime>> 进行排序。

这就是List 的样子:

[[21:29, 22:29], [16:29, 17:29]]

我希望列表是这样的

[[16:29, 17:29], [21:29, 22:29]]

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 到目前为止你尝试过什么?还有什么逻辑?您有一个列表列表,那么如何对它们之间的列表进行排序?
  • 这是一个列表。您不仅没有自己解决这个问题,甚至您的要求也不清楚。
  • 您希望如何对列表进行排序? [[1,3],[2,4]] 之类的所需顺序是什么?字典式的?平均?

标签: java list sorting


【解决方案1】:

您可以按照this answer 中的说明定义比较器并执行排序。

演示:

import java.time.LocalTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.IntStream;

public class Main {

    public static void main(String args[]) {
        List<List<LocalTime>> list = 
            new ArrayList<>(List.of(
                    new ArrayList<>(List.of(LocalTime.of(21, 29), (LocalTime.of(22, 29)))),
                    new ArrayList<>(List.of(LocalTime.of(16, 29), (LocalTime.of(17, 29))))
            ));

        Comparator<List<LocalTime>> comparator = 
            (list1, list2) -> 
                            IntStream.range(0, list1.size())
                                     .map(i -> list1.get(i).compareTo(list2.get(i)))
                                     .filter(value -> value != 0)
                                     .findFirst()
                                     .orElse(0);
        
        list.sort(comparator);

        System.out.println(list);
    }
}

输出:

[[16:29, 17:29], [21:29, 22:29]]

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多