【问题标题】:Collectors.toSet changes order [duplicate]Collectors.toSet 更改顺序 [重复]
【发布时间】:2019-02-22 12:00:50
【问题描述】:

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

我正在做这样的事情

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

【问题讨论】:

  • 我认为,哈希集中的“顺序”有些不确定或取决于每个值的实际哈希码。
  • 无序集中的顺序“应该是”,无论它碰巧出现。他们没有保证订单。

标签: java collections


【解决方案1】:

通常,Set 对迭代顺序没有任何保证。

如果您需要定义顺序,可以使用Collectors.toCollection(TreeSet::new)(用于元素的自然顺序)或Collectors.toCollection(LinkedHashSet::new)(用于插入顺序)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多