有没有办法找到多个列出了常见的元素呢?(Is there a way to find common

2019-08-17 06:25发布

我有整型数组列表。 我需要找到那些之间的共同之处。 我能想到的是一个什么样的扩展中列出的常见元素在两个列表

Example would be 
[1,3,5],
[1,6,7,9,3],
[1,3,10,11]

should result in [1,3]

有数组中没有重复为好。

有没有一种简单的方法来做到这一点?

Answer 1:

你可以改变列表来台,然后用Set.retainAll方法对不同组之间的交集。 一旦你所有的相交集,留下了共同的元素,您可以将所得到重新设置为一个列表。



Answer 2:

您可以使用所提供集的交集方法番石榴 ,这里是一个小例子:

public <T> Set<T> intersection(List<T>... list) {
    Set<T> result = Sets.newHashSet(list[0]);
    for (List<T> numbers : list) {
        result = Sets.intersection(result, Sets.newHashSet(numbers));
    }
    return result;
}

希望能帮助你



Answer 3:

我们可以使用retainAll的收藏方法 。 我初始化我的commons的ArrayList与第一数组列表,并呼吁这对于每个剩余的ArrayList。

    List<List<Integer>> lists = new ArrayList<List<Integer>>();
    lists.add(new ArrayList<Integer>(Arrays.asList(1, 3, 5)));
    lists.add(new ArrayList<Integer>(Arrays.asList(1, 6, 7, 9, 3)));
    lists.add(new ArrayList<Integer>(Arrays.asList(1, 3, 10, 11)));

    List<Integer> commons = new ArrayList<Integer>();
    commons.addAll(lists.get(1));
    for (ListIterator<List<Integer>> iter = lists.listIterator(1); iter.hasNext(); ) {
        commons.retainAll(iter.next());
    }

    System.out.println(commons);
    System.out.println(lists.get(1));


Answer 4:

如果您正在寻找返回存在于所有列出元素的功能,

然后将直线前进&简单的方式是建立一个统计{<构件,OCCURENCES>}

这里的条件是相同的列表中不存在重复,

private Set<Integer> getCommonElements(ArrayList<Integer[]> idList)
{

    MapList<Integer,Short> stat = new MapList<Integer,Short>();

    // Here we count how many times each value occur
    for (int i = 0; i < idList.size(); i++)
    {
        for (int j = 0; j < idList.get(i).size; j++)
        {
            if (stat.containsKey(idList.get(i)[j]))
            {
                stat.set(idList.get(i)[j], stat.get(idList.get(i)[j])+1);
            }
            else
            {
                stat.add(idList.get(i)[j], 1);
            }
        }
    }

    // Here we only keep value that occured in all lists
    for (int i = 0; i < stat.size(); i++)
    {
        if (stat.get(i) < idList.size())
        {
            stat.remove(i);
            i--;
        }
    }

    return stat.keySet();
}


Answer 5:

与Java 8

ArrayList的保留= list1.stream()。过滤器(列表2 ::包含).filter(项目list3 ::包含).collect(toList())



Answer 6:

public class ArrayListImpl{
  public static void main(String s[]){
    ArrayList<Integer> al1=new ArrayList<Integer>();
     al1.add(21);al1.add(23);al1.add(25);al1.add(26);
    ArrayList<Integer> al2=new ArrayList<Integer>();
     al2.add(15);al2.add(16);al2.add(23);al2.add(25);
     ArrayList Al3=new ArrayList<Integer>();
     al3.addAll(al1);
      System.out.println("Al3 Elements :"+al3);
     al3.retainAll(al2); //Keeps common elements of (al1 & al2) & removes remaining elements
       System.out.println("Common Elements Between Two Array List:"+al3);  
}
}


文章来源: Is there a way to find common elements in multiple lists?