Java交集集合

标签 java collections apache-commons-collection

我想找到一种优雅的方式:

我有两个集合 A 和 B,如果它们都不为空,那么我需要做交集(将公共(public)元素存储在另一个列表中)。

如果其中一个是空的,我将不得不获取另一个的所有元素。

如果两者都为空,则生成的集合将为空。

有没有办法在不使用很多 if 条件且性能良好的情况下解决这个问题?

这是可行的,但不是很好:

import org.apache.commons.collections4.CollectionUtils;
...
...
    List<Long> listA = new ArrayList<Long>();
    List<Long> listB = new ArrayList<Long>();
    //initialisation list A & listB

    List<Long> outputList = null;
    if(listA.size()>0 && listB.size() >0) {
        outputList = new ArrayList(CollectionUtils.intersection(listB, listA));
    }
    else if(listA.size()==0){
        outputList = listB;
    }
    else if(listB.size()==0){
        outputList = listA;
    }

谢谢!

最佳答案

我不会这么想,仅仅因为你的情况:

If one list is empty, return the other list.

这不是交集的典型定义,我不确定它是否是标准库中涵盖的常见操作。因此,您必须自己处理该逻辑。

如果你真的想摆脱 if 语句,那么你可以使用三元运算符:

return listA.isEmpty() ? listB :
       listB.isEmpty() ? listA :
       new ArrayList(CollectionUtils.intersection(listB, listA));

关于Java交集集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34732217/

相关文章:

java - Jaxb:处理剩余 Web 服务响应中的可选元素

java - 如何从 gradle 项目中的命令行覆盖集成测试中的属性?

java - 从哈希集中删除重复项的逻辑

c# - 如何验证集合是否包含所有唯一对象

java - 如何迭代 MultiKeyMap?

java - MongoDB : How to make findAndModify returns the Last Updated Record

Java,理解

Java:如果存在键,则构造一个聚合其值的映射

java - 是否有与 Apache Commons Collections 中的 ArrayIterator 通用的等价物?

java - BeanToPropertyValueTransformer 和 commons-collections4