我有两组:
val Set<Integer> setA = #{1, 2, 3}
val Set<Integer> setB = #{3, 4, 5} + setA
我希望setB
包含1、2、3、4、5。
但是,+
运算符返回Iterable
的实例,而不是Set
。
是否有任何xtend快捷方式可以让我做自己想做的事?
答案 0 :(得分:1)
恐怕没有支持工会的支持。您可能要为两个集合添加一个operator_plus
并委托给番石榴Sets.union
。
def <T> Set<? extends T> operator_plus(Set<? extends T> left, Set<? extends T> right) {
return Sets.union(left, right)
}
答案 1 :(得分:0)
没有重新定义运算符,您必须手动将Iterable
转换为Set
。
val Set<Integer> setA = #{1, 2, 3}
val Set<Integer> setB = (#{3, 4, 5} + setA).toSet
如果您具有可变的集合,则还有另一种方法:+=
运算符,它是任何集合上addAll
的快捷方式。
val Set<Integer> setA = #{1, 2, 3}
val Set<Integer> setB = newHashSet(3, 4, 5)
setB += setA
这两种解决方案看起来都不是特别好,您可能要避免可变性。
正如另一个答案中所建议的那样,虽然我宁愿将其作为静态扩展而不是重新定义运算符,但Guava的Sets.union
方法可能会派上用场。然后您可以使用:
val Set<Integer> setA = #{1, 2, 3}
val Set<Integer> setB = #{3, 4, 5}.union(setA)
但是请注意,union
返回两个集合的 view ,如果基础集合是可变的,则可以更改。