Подтвердить что ты не робот

Узнайте элементы архариста, которых нет в другом arraylist

Мне нужно найти лучший способ узнать, что элементы, которые не представлены во втором arraylist. предположим, что

Arraylist a,b, 

Arraylist a={1,2,3,4,5};
Arraylist b={2,3,4};

Итак, в основном я хочу узнать, что элементы a, которые отсутствуют в arraylist b.

Итак, каковы наилучшие решения для этого?

4b9b3361

Ответ 1

List<Integer> c = new ArrayList<>(a);
c.removeAll(b);

Также рассмотрите использование наборов вместо списков.

Ответ 2

Вы можете попробовать removeAll:

List<Integer> notPresent = new ArrayList<Integer>(a);
notPresent.removeAll(b);

Ответ 3

Вы можете использовать Apache Commons Collections, который явно использует метод для этой цели:

public static void main(String[] args) {
    List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
    List<Integer> b = Arrays.asList(new Integer[] { 2, 3, 4 });
    Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
    System.out.println(aMinusB);
}

Печатный результат: [1, 5].

Apache Commons libs хорошо протестированы и обычно используются для расширения стандартных функциональных возможностей Java. Этот конкретный метод принимает Iterable как параметры, поэтому вы можете использовать любой Collection, который вы хотите. Вы также можете смешивать различные типы коллекций:

public static void main(String[] args) {
    List<Integer> a = Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 });
    Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
    Collection<Integer> aMinusB = CollectionUtils.subtract(a, b);
    System.out.println(aMinusB);
}

Печатный результат тот же, [1, 5].

Ознакомьтесь с Javadoc здесь.


Для полноты, Google Guava библиотека не имеет эта функция:

Collection *subtract*(Collection, Collection)
Нет эквивалента - создайте ArrayList, содержащий a, а затем вызовите remove для него для каждого элемента в b.

Однако он реализует метод Sets.difference(), который можно использовать, если вы предпочитаете Guava и работаете с наборами:

public static void main(String[] args) {
    Set<Integer> a = new HashSet<Integer>(Arrays.asList(new Integer[] { 1, 2, 3, 4, 5 }));
    Set<Integer> b = new HashSet<Integer>(Arrays.asList(new Integer[] { 2, 3, 4 }));
    Set<Integer> aMinusB = Sets.difference(a, b);
    System.out.println(aMinusB);
}

В результате все элементы в a, которые не существуют в b (т.е. [1, 5]). Конечно, порядок не определяется, так как он работает с множествами.

Ответ 4

Используйте org.apache.commons.collections4.ListUtils

Учитывая

List<Integer> a = Arrays.asList(new Integer[]{  1,2,3,4,5});
List<Integer> b = Arrays.asList(new Integer[]{0,1,2,3});

Действие

List<Integer> c = ListUtils.removeAll(b, a)

Результат в списке c

4, 5

Ответ 5

Пожалуйста, попробуйте вот так

for (Object o : a) {  
  if (!b.contains(o)) {  
    // this is not present
  }  
}  

Ответ 6

Прокрутите один список, затем проверьте, есть ли каждый элемент в другом списке с помощью contains.

Ответ 7

Что-то вроде этого. Если вы думаете, что в a могут быть дубликаты, вы можете попробовать другой тип Collection, например a Set для notPresent.

   List<Integer> notPresent = new ArrayList<Integer>();

    for (Integer n : a){
     if (!b.contains(n)){
       notPresent.add(n);
     }
    }

Ответ 8

Попробуйте следующее:

 public static void main(String[] args) {
        List<Integer> a = new ArrayList<Integer>();
        List<Integer> b = new ArrayList<Integer>();
        List<Integer> exclusion = new ArrayList<Integer>();

        a.add(1);
        a.add(2);
        a.add(3);
        a.add(4);

        b.add(1);
        b.add(2);
        b.add(3);
        b.add(5);

        for (Integer x : a) {
            if (!b.contains(x)) {
                exclusion.add(x);
            }
        }

        for (Integer x : exclusion) {
            System.out.println(x);
        }

    }

Ответ 9

Попробуйте это...

Используйте метод contains() списка.

ArrayList<Integer> aList = new ArrayList<Integer>();

for (Integer i : a){

      if (!(b.contains(i))){

             aList.add(i);

       }

     else{
             continue;

      }

 }