猿问

Collectors.toSet 更改顺序

我在字符串数组的流处理中看到了一个有趣的行为。


我正在做这样的事情


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,所以它不应该弄乱数据的顺序。不知道为什么!!


慕桂英546537
浏览 597回答 1
1回答

婷婷同学_

通常,Set 对迭代顺序没有任何保证。如果需要定义顺序,可以使用Collectors.toCollection(TreeSet::new)(用于元素的自然顺序)或Collectors.toCollection(LinkedHashSet::new)(用于插入顺序)。
随时随地看视频慕课网APP

相关分类

Java
我要回答