繁体   English   中英

java.util.Collection的经典集合操作

[英]Classical set operations for java.util.Collection

java.util.Collection类上的经典集合操作是否有任何内置功能? 我的具体实现将是ArrayList,但这听起来应该适用于Collection的所有子类。 我正在寻找类似的东西:

ArrayList<Integer> setA ...
ArrayList<Integer> setB ...
ArrayList<Integer> setAintersectionB = setA.intersection(setB);
ArrayList<Integer> setAminusB = setA.subtract(setB);

经过一番搜索,我才能找到本土解决方案。 此外,我意识到我可能会混淆“集合”的想法与“集合”的想法混淆,不允许和分别允许重复。 也许这只是Set界面的功能?

如果没有人知道任何内置功能,也许我们可以将其用作标准实践Java集操作代码的存储库? 我想这个轮子已经多次重新发明。

交叉点用Collection.retainAll完成; 使用Collection.removeAll减法; Collection.addAll联合。 在每种情况下, Set将像一个集合, List将像列表一样。

作为可变对象,它们在适当的位置运行。 如果要保留原始可变对象未突变,则需要显式复制。

我会推荐谷歌番石榴 Sets类似乎正是您正在寻找的。 它有交叉方法和差分方法。

如果您有兴趣,可能需要观看此演示文稿 它指的是Google Collections,这是Guava的原始名称。

您在寻找java.util.Set接口(及其实现HashSet和TreeSet(已排序))?
接口定义了removeAll(Collection c),它看起来像substract(),而retainAll(Collection c)看起来像是交集。

对于可变操作,请参阅接受的答案。

对于一个可重定义的变体,您可以使用java 8执行此操作

减法

set1
  .stream()
  .filter(item-> !set2.contains(item))
  .collect(Collectors.toSet())

路口

set1
  .stream()
  .filter(item-> set2.contains(item))
  .collect(Collectors.toSet())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM