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

新手上路,请多包涵

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

 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());
}

原文由 Ivan C 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

这不像 Collections.sort() 参数引用被排序。在这种情况下,您只需得到一个排序的流,您需要收集并最终分配给另一个变量:

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

您刚刚错过了分配结果

原文由 Jan B. 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 list.sort 代替:

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

并使用 Comparator.comparing 使其更简洁:

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

在其中任何一个之后, list 本身将被排序。

您的问题是 list.stream.sorted 返回 排序后的数据,它没有按照您的预期进行排序。

原文由 River 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题