有没有更好的方法在java中组合两个字符串集?

2022-08-31 09:53:31

我需要在过滤掉冗余信息时组合两个字符串集,这是我想出的解决方案,有没有更好的方法可以建议?也许是我忽略了的内置内容?谷歌没有任何运气。

Set<String> oldStringSet = getOldStringSet();
Set<String> newStringSet = getNewStringSet();

for(String currentString : oldStringSet)
{
    if (!newStringSet.contains(currentString))
    {
        newStringSet.add(currentString);
    }
}

答案 1

由于 a 不包含重复条目,因此您可以通过以下方式将两者组合在一起:Set

newStringSet.addAll(oldStringSet);

如果将内容添加两次并不重要,该集合将仅包含该元素一次...例如,无需使用包含方法进行检查。


答案 2

您可以使用此单行代码执行此操作

Set<String> combined = Stream.concat(newStringSet.stream(), oldStringSet.stream())
        .collect(Collectors.toSet());

使用静态导入,它看起来更好

Set<String> combined = concat(newStringSet.stream(), oldStringSet.stream())
        .collect(toSet());

另一种方法是使用flatMap方法:

Set<String> combined = Stream.of(newStringSet, oldStringSet).flatMap(Set::stream)
        .collect(toSet());

此外,任何集合都可以很容易地与单个元素组合

Set<String> combined = concat(newStringSet.stream(), Stream.of(singleValue))
        .collect(toSet());

推荐