我需要结合两个字符串集,同时过滤掉冗余信息,这是我提出的解决方案,有没有更好的方法,任何人都可以建议?也许是我忽视的东西?谷歌没有运气.
Set<String> oldStringSet = getOldStringSet();
Set<String> newStringSet = getNewStringSet();
for(String currentString : oldStringSet)
{
if (!newStringSet.contains(currentString))
{
newStringSet.add(currentString);
}
}
Run Code Online (Sandbox Code Playgroud)
dac*_*cwe 108
由于a Set不包含重复条目,因此您可以将两者结合起来:
newStringSet.addAll(oldStringSet);
Run Code Online (Sandbox Code Playgroud)
如果你添加两次东西并不重要,该集合将只包含一次元素...例如,它不需要检查使用contains方法.
ytt*_*rrr 70
你可以使用这个单线程来做到这一点
Set<String> combined = Stream.concat(newStringSet.stream(), oldStringSet.stream())
.collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
使用静态导入它看起来更好
Set<String> combined = concat(newStringSet.stream(), oldStringSet.stream())
.collect(toSet());
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用flatMap方法:
Set<String> combined = Stream.of(newStringSet, oldStringSet).flatMap(Set::stream)
.collect(toSet());
Run Code Online (Sandbox Code Playgroud)
此外,任何集合都可以轻松地与单个元素组合
Set<String> combined = concat(newStringSet.stream(), Stream.of(singleValue))
.collect(toSet());
Run Code Online (Sandbox Code Playgroud)
pro*_*e-e 23
与番石榴一样:
Set<String> combinedSet = Sets.union(oldStringSet, newStringSet)
Run Code Online (Sandbox Code Playgroud)
Dam*_*ash 11
从定义Set仅包含唯一元素.
Set<String> distinct = new HashSet<String>();
distinct.addAll(oldStringSet);
distinct.addAll(newStringSet);
Run Code Online (Sandbox Code Playgroud)
要增强代码,您可以为此创建一个通用方法
public static <T> Set<T> distinct(Collection<T>... lists) {
Set<T> distinct = new HashSet<T>();
for(Collection<T> list : lists) {
distinct.addAll(list);
}
return distinct;
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 Guava,您还可以使用构建器来获得更大的灵活性:
ImmutableSet.<String>builder().addAll(someSet)
.addAll(anotherSet)
.add("A single string")
.build();
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 Apache Common,请使用SetUtils来自org.apache.commons.collections4.SetUtils;
SetUtils.union(setA, setB);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69058 次 |
| 最近记录: |