Is there a way to find common items in multiple lists?

I have a list of whole arrays. I need to find common elements between them. I can think of expanding what is indicated in common elements in two lists

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

There are no duplicates in arrays either.

Is there a direct way to do this?

+8
java collections arrays guava colt
source share
5 answers

You can convert lists to sets, and then use the Set.retainAll method to intersect between different sets. When you cross all the sets, you are left with the common elements, and you can convert the resulting set back to a list.

+14
source share

You can use the Set intersection method suggested by Guava . Here is a small example:

 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; } 

Hope this helps you

+8
source share

We can use the retainAll collection method . I initialized my commons arraylist to the first list of arrays and named it for each remaining arraylists.

  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)); 
+4
source share

If you are looking for a function that returns elements that exist in all lists,

then the direct and easy way is to create statistics {<member, occurrences>}

The condition here is not duplicate among the same list,

 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(); } 
+1
source share
 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); } } 
0
source share

All Articles