【发布时间】:2018-07-13 17:26:43
【问题描述】:
我有一个 Java Set,我将信息提供给:
Set<myData> dataLocations = getData(location);
我想对这个 Set 进行排序 我尝试了 sortedSet 但无法让它工作,所以我尝试了这个
dataLocations = dataLocations.stream().sorted(Comparator.comparing(myData -> myData.expDtTm)).collect(Collectors.toSet());
唯一的问题是在 Java 文档中它不保证保留任何订单。所以我尝试了这个:
TreeSet<myData> sortedDataLocations = dataLocations.stream().sorted(Comparator.comparing(myData -> myData.expDtTm)).collect(Collectors.toCollection(TreeSet<myData>));
不用说它不起作用,所以任何有其他想法的人都会非常感激。
【问题讨论】:
-
请使用有序的数据结构,例如
List。所以排序后使用Collectors.toList()。 -
myData的基本定义,我猜是自定义类的实例?定义无法使其工作任何异常、错误消息或特定的元素顺序? -
TreeSet有 a constructor 需要一个Comparator。 -
@Slaw 但是
Collectors.toSet()没有设置工厂。所以你不会知道你得到了哪个确切的Set实现 -
TreeSet和Comparator如下面的答案所示是处理此问题的好方法。要添加到您的工具箱中的其他内容:LinkedHashSet是Set实现,其迭代顺序与元素插入顺序相同。
标签: java collections java-stream java.time.instant