【问题标题】:How can I sort a 2D List using lambdas/streams per row?如何使用每行的 lambdas/streams 对 2D 列表进行排序?
【发布时间】:2018-09-19 14:39:33
【问题描述】:

我有一个矩阵,我想知道是否有任何方法可以对每行进行排序,我已经尝试通过遍历 ArrayList 并比较每行中的每个元素来手动对其进行排序,但这似乎很乏味。我有没有更好的方法来解决这个问题。我正在考虑使用 lambdas/streams

我有以下字符串列表,

List<List<String>> matrix = new ArrayList<List<String>>();

假设矩阵包含ff:

sad,eat,air,vice,ride
cash,grade,save,hide,are
twin,grid,goose,hey,shade

排序后的输出是:

air,eat,ride,sad,vice
are,cash,grade,hide,save
goose,grid,hey,shade,twin

通过使用循环和比较器按我想要的方式对其进行排序,从而解决了我的问题。代码如下:

for (List<String> row : matrix) {
                row.sort(Comparator.comparing(r -> r.getString()));
}

【问题讨论】:

    标签: java list sorting arraylist 2d


    【解决方案1】:

    试试这个。

    matrix.forEach(row -> Collections.sort(row));
    

    【讨论】:

    • @Roy 你能解释一下为什么它不是答案吗?在我看来,它完美地解决了 OP 的问题。
    【解决方案2】:

    您可以将forEach() 用于主列表,将sort() 用于每个子列表:

    matrix.stream().forEach(m -> {
        System.out.print(m.stream().sorted().collect(Collectors.joining(", ")));
        System.out.println();
    });
    

    【讨论】:

    • 谁能解释一下为什么上述方法无效?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多