在 Java 中使用 stream.sorted() 对列表进行排序

2022-08-31 08:29:59

我对从流中对列表进行排序感兴趣。这是我使用的代码:

list.stream()
    .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue()))
    .collect(Collectors.toList());

我错过了什么吗?之后不会对列表进行排序。

它应该根据具有最低值的项目对列表进行排序。

for (int i = 0; i < list.size(); i++)
{
   System.out.println("list " + (i+1));
   print(list, i);
}

和打印方法:

public static void print(List<List> list, int i)
{
    System.out.println(list.get(i).getItem().getValue());
}

答案 1

这与参数引用排序的位置不同。在本例中,您只需获得一个排序的流,您需要收集该流并最终分配给另一个变量:Collections.sort()

List result = list.stream().sorted((o1, o2)->o1.getItem().getValue().
                                   compareTo(o2.getItem().getValue())).
                                   collect(Collectors.toList());

您刚刚错过了分配结果


答案 2

请改用 list.sort

list.sort((o1, o2) -> o1.getItem().getValue().compareTo(o2.getItem().getValue()));

并使用 Comparator.compareing 使其更加简洁:

list.sort(Comparator.comparing(o -> o.getItem().getValue()));

在上述任一之后,其本身将被排序。list

您的问题是list.stream.sorted返回排序后的数据,它没有像您预期的那样就地排序。


推荐