collectors.toset更改顺序

jdg4fx2g  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(480)

这个问题在这里已经有答案了

hashset的迭代顺序(9个答案)
两年前关门了。
我在字符串数组的流处理中看到了一个有趣的行为。
我在做这样的事

String s =  "1_2_string";
String[] arr = s.split("_");
final Set<String> CAST_PATTERN = Set.of("string", "string2");
Arrays.stream(arr)
        .filter(id -> !CAST_PATTERN.contains(id))
        .map(Long::valueOf)
        .collect(Collectors.toSet());

预期的结果应该是一个集合[1,2],但实际的结果是[2,1]collectors.toset()创建一个hashset而不是sortedset,因此它不应该扰乱数据的顺序。不知道为什么!!

rqdpfwrv

rqdpfwrv1#

通常,集合对迭代顺序没有任何保证。
如果需要定义的订单,可以使用 Collectors.toCollection(TreeSet::new) (元素的自然顺序)或 Collectors.toCollection(LinkedHashSet::new) (用于插入顺序)。

相关问题