2

Let's say I have these lists:

List<Integer> numbersA=new ArrayList<Integer>();
List<Integer> numbersB=new ArrayList<Integer>();

"Numbers A" is [1,3,4,7,5,2] (There are no duplicate numbers) and "Numbers B" is: [13,32,533,3,4,2]

So the method will remove "Numbers A" from "Numbers B",and "Numbers B" will be: [13,32,533]

Matan Itzhak
  • 2,702
  • 3
  • 16
  • 35

3 Answers3

2

Use the method RemoveAll, here the doc

Example:

public static void main(String[] args) {
List<Integer> numbersA = new ArrayList<>();
List<Integer> numbersB = new ArrayList<>();
numbersA.addAll(Arrays.asList(new Integer[] { 1, 3, 4, 7, 5, 2 }));
numbersB.addAll(Arrays.asList(new Integer[] { 13, 32, 533, 3, 4, 2 }));
System.out.println("A: " + numbersA);
System.out.println("B: " + numbersB);

numbersB.removeAll(numbersA);
System.out.println("B cleared: " + numbersB);
}

this will print

A: [1, 3, 4, 7, 5, 2]

B: [13, 32, 533, 3, 4, 2]

B cleared: [13, 32, 533]

Community
  • 1
  • 1
ΦXocę 웃 Пepeúpa ツ
  • 47,427
  • 17
  • 69
  • 97
0

You can use boolean removeAll(Collection<?> c); method of List. It will remove the common element.

numbersB.removeAll(numbersA);
sauumum
  • 1,638
  • 1
  • 19
  • 36
0
 Java 8 version

Version 1 Mutating the original Array

Integer [] array1 = new Integer[]{1,3,4,7,5,2};
Integer [] array2 = new Integer[]{13,32,533,3,4,2};

List<Integer> numbersA=Arrays.asList(array1);
final List<Integer> numbersB=Arrays.asList(array2);

numbersA.stream().forEach(t->numbersB.remove(t));

Version 1 using filter and returning new List

Integer [] array1 = new Integer[]{1,3,4,7,5,2};
    Integer [] array2 = new Integer[]{13,32,533,3,4,2};

    List<Integer> numbersA=Arrays.asList(array1);
    final List<Integer> numbersB=Arrays.asList(array2);

   List<Integer> numbersA.stream().filter(t->numbersB.contains(t)).collect(Collectors.toList());
Alexander Petrov
  • 9,204
  • 31
  • 70
  • I don't really like your answer, first of all you don't need to create a List from an array to get the stream, and second you're changing state in the forEach when you could use filter and collect to another array, I think it would be much clearer/cleaner – Pedro David Jul 24 '16 at 15:24