这个问题在这里已有答案:
我在String数组的流处理中看到了一个有趣的行为。
我正在做这样的事情
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,所以它不应该弄乱数据的顺序。不知道为什么!!
通常,Set对迭代顺序没有任何保证。
如果您需要定义的订单,可以使用Collectors.toCollection(TreeSet::new)
(对于元素的自然顺序)或Collectors.toCollection(LinkedHashSet::new)
(对于插入顺序)。