Меню

Как сравнить два листа java



Сравнение двух элементов List с потоком в Java и возвращением

У меня есть один список, который содержит объекты компании.

И у каждой компании есть метод getName() , который возвращает название компании.

List companiesList имеет несколько компаний внутри, и я хотел бы сравнить этот список со списком строк, которые содержат названия компаний

И это мой список сравнения

List searchList = Arrays.asList(«abc», «xyz»);

У меня есть метод, который получает компании и с потоком и фильтрует его с некоторыми условиями из БД, и я хотел бы добавить еще один фильтр, который возвращает мне компании, которые равны строкам в searchList

Таким образом, в основном идея состоит в том, чтобы сравнить каждый элемент в companiesList с getName () и проверить, существует ли он в списке searchList.

Я знаю, что об этом спрашивали много раз, и есть много примеров, но я не мог найти правильное, правильное решение, которое работает. Заранее спасибо!

4 ответа

Вы можете просто добавить еще одно условие в вас .filter() , чтобы возвращать результаты, которые есть в вашем searchList , только после того, как вы отфильтруете версию.

Немного лучше преобразовать searchList в HashSet, так как вы снизите сложность поиска компаний с O(n) до O(1) , а также позаботятся об удалении дублирующихся значений. Ты можешь иметь. Еще лучше передать HashSet вместо списка (если у вас есть контроль над дизайном интерфейса).

Вот фрагмент, где я сначала преобразовываю searchList в набор, а затем добавляю новое условие в .filter() , чтобы вернуть только те компании, которые присутствуют в searchList .

Пожалуйста, проверьте, работает ли вышеуказанный код.

Источник

Java Сравнить два значения объекта List?

У меня два списка * *ListA listA = new ArrayList () ** а также ListB listB = new ArrayList () оба содержат объект типа MyData, а MyData содержит эти переменные.

ListA и ListB оба содержат объекты MyData, теперь я должен сравнить оба значения объекта списка здесь name, а также проверить переменную, как если бы ListA содержал эти значения объекта

и ListB также содержат

тогда я должен сравнить списки и вернуть false, потому что оба списка одинаковы, но если ListA содержит

и ListB содержат

тогда я должен сравнить списки и вернуть истину, потому что оба списка не совпадают

или наоборот, поэтому любое небольшое изменение в любых значениях списка я должен вернуть true. Одна вещь, которую я должен упомянуть здесь объекты могут быть в любом порядке.

13 ответов

Я получил это решение для вышеуказанной проблемы

Редакция:-
Как мы можем это охватить. Представьте, что у вас есть два массива «A»,true «B»,true «C»,true и «A»,true «B»,true «D»,true. Даже если у массива один есть C, а у массива два есть D, нет никакой проверки, которая поймает это (Упоминается @Patashu). Итак, для этого я внес изменения ниже.

Это не самое эффективное решение, но самый краткий код будет:

Обновить:

@ УэслиПортер прав. Решение выше не будет работать, если дубликаты объектов находятся в коллекции.
Для полного решения вам нужно перебрать коллекцию, чтобы дублированные объекты обрабатывались правильно.

Обновление 28 октября 2014:

@ RoeeGavriel прав. Оператор возврата должен быть условным. Код выше обновляется.

ArrayList уже есть поддержка этого, с equals метод. Цитирование документов

. Другими словами, два списка определены как равные, если они содержат одинаковые элементы в одинаковом порядке.

Это требует от вас, чтобы правильно реализовать equals в вашем MyData учебный класс.

Читайте также:  Кондор птица сравнение с человеком

редактировать

Вы обновили вопрос о том, что списки могут иметь разные порядки. В этом случае сначала отсортируйте список, а затем примените равенства.

Источник

Проверьте, равны ли два списка в Java

Вступление:

Списки на Java упорядочены по природе. Таким образом, два списка считаются равными, если они содержат одинаковые элементы в одинаковом порядке. В этом уроке мы увидим, как сравнить два списка на равенство в Java.

Мы также рассмотрим способы сравнения элементов в двух списках и игнорирования их порядка.

Порядок поддержания равенства списков:

Как мы знаем, два списка равны, когда они имеют одинаковые элементы и в одинаковом порядке. Поэтому, если мы заботимся о порядке, мы можем использовать метод equals () для проверки равенства:

И list1, и list3 содержат одинаковые элементы <1, 2, 3>, но в разных порядках и поэтому считаются неравными.

Порядок игнорирования равенства списков:

Что если мы хотим игнорировать порядок элементов для проверки на равенство?

Много раз все, что мы хотим, это проверить, содержат ли два списка одинаковые элементы, независимо от их порядка в списке. Давайте рассмотрим способы достижения этого:

1. Сортировка списков и сравнение:

Если оба списка нулевые , мы вернем true . Или же, если только один из них указывает на нулевое значение или размер () двух списков отличается, мы вернем false . Если ни одно из этих условий не выполняется, мы сначала отсортируем два списка, а затем сравним их:

Обратите внимание, что мы создали копии двух списков, чтобы гарантировать, что элементы в исходных списках остаются нетронутыми .

2. С помощью Set / содержит () Проверьте:

Если данные в наших списках уникальны, т.е. нет дублирования, мы можем просто создать TreeSets из заданных списков и затем сравнить их с помощью equals () :

Мы можем еще больше упростить это, просто установив проверку на проверку содержимого () вместо создания наборов :

Однако обратите внимание, что эти подходы ( contains () check / With Sets ) потерпят неудачу, если в нашем наборе данных есть повторы. Например:

В приведенном выше примере l ist1 содержит одно 2 и два 3, а list2 содержит два 2 и одно 3 . Тем не менее, эта форма реализации будет неверно возвращать true .

3. Apache Commons:

Вместо написания собственного кода мы можем выбрать для выполнения утилиту Apache Commons Collections :

Метод isEqualCollection () возвращает true, если две коллекции содержат абсолютно одинаковые элементы с одинаковым количеством элементов.

Вывод:

В этом уроке мы научились проверять, равны ли два списка в Java. Теперь мы знаем, что по умолчанию два списка равны, если они имеют одинаковые элементы в одинаковом порядке.

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

Оставьте первый комментарий.

Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Проверьте, равны ли два списка в Java

Мнения, высказанные участниками Java Code Geeks, являются их собственными.

Источник

Java-лучший способ сравнить два списка
>?

Как лучше всего сравнить строковые элементы двух List
> .

В конце концов, я хочу знать, содержат ли они одни и те же элементы (true) или нет (false)

Эти два списка я хочу сравнить:

Я искал уже отвеченные вопросы на форуме, но мне ничего не помогло ..

7 ответов

У меня есть два списка, а именно, List oldEmplist и List newEmplist , и я должен сравнить оба списка только с 2 свойствами класса employee, а именно empOrigId , empOrigNumber , и эти два свойства будут установлены только для newEmplist , поэтому я должен сравнить.

У меня есть два списка скажем List names; and List stud; Учащийся имеет 3 свойства ID Name Section Теперь я хочу перебрать List и сравнить каждый элемент со свойством Name в List и хочу выполнять операции, если они не равны Я попробовал.

Попробуйте fnlData.equals(fnlDataTMP) , если оба списка в порядке

или, если порядок не имеет значения, попробуйте создать набор hash, а затем сравнить с помощью equals

похоже, вам нужна двойная итерация

Вы можете улучшить решение, проверив первую разницу в hashCode

если hashCode равны, то проверьте в конечном итоге глубокую разницу

Я не думаю, что есть способ, который позволит вам достичь этого из коробки.

Вы можете сделать что-то вроде функционального метода java List.join, чтобы быстро сгенерировать 2 списка и сравнить их:

Что нужно отметить:

  • Это, вероятно, не самая дешевая операция — поэтому ее не следует вызывать слишком часто в критическом по времени сценарии (например, поток UI)
  • Он не делает «real» равным-для этого вам придется сделать вложенный цикл, как в приведенном выше ответе. Это проверяет, что оба Соединенных списка имеют одинаковые элементы с одинаковой мощностью: например, если fnlData имеет 2 списка с «1» и «2» в качестве единственных элементов, а fnlDataTMP имеет 1 список с «1», «2» в качестве элементов, то это будет означать, что оба они равны. В зависимости от вашего сценария это может быть неуместно — если это имеет отношение к делу, я не вижу способа обойти вложенные циклы.

Я хочу сравнить эти два ArrayList : public static ArrayList

  • > arrayList1 = new ArrayList
  • >(); public static ArrayList
  • > arrayList2 = new ArrayList
  • >(); Если они имеют одинаковые элементы, он вернет.

    Если под одними и теми же элементами вы подразумеваете, что эти два списка точно такие же, но в другом порядке, то я предлагаю вам отсортировать их по спискам и затем сравнить.

    Я его еще не проверял!

    Для того чтобы коллекции (списки) были равны, они должны быть надлежащим подмножеством друг друга. Таким образом, list1.containsAll(list2) и list2.containsAll(list1) . Для списка внутри списка вам придется выполнить цикл, но это, по сути, то, что должна делать любая встроенная библиотека.

    Я придумал решение , которое не нуждается в двух внутренних циклах, используя Collections.sort(List list), который сортирует список на месте, и List.containsAll(java.util.Collection), который сравнивает два списка для их элементов.

    Если вы не хотите изменять порядок элементов во внутренних списках, вы можете создавать копии внешних списков и выполнять над ними операции.

    Примечание: это работает только для сортируемых коллекций.

    Сохраните один из списков в HashMap, а затем повторите другой список и проверьте, содержит ли карта уже этот KEY. Конечно, вы должны убедиться, что типы KEY совпадают.

    Похожие вопросы:

    Возможный Дубликат : Самый простой способ объединить два списка в карту (Java)? Учитывая это: List integers = new ArrayList (); List strings = new.

    Мое приложение генерирует 2 больших списка (до 3.5mill строковых записей). Мне нужен самый лучший и быстрый способ сравнить его. В настоящее время я делаю это вот так: List list1 =.

    Я пытаюсь сравнить два списка и сохранить в каждом списке только те элементы, которые уникальны для каждого списка. Не могли бы вы помочь? Я знаю, как сделать пересечение, но на самом деле мне нужно.

    У меня есть два списка, а именно, List oldEmplist и List newEmplist , и я должен сравнить оба списка только с 2 свойствами класса employee, а именно empOrigId .

    У меня есть два списка скажем List names; and List stud; Учащийся имеет 3 свойства ID Name Section Теперь я хочу перебрать List и сравнить каждый элемент.

    Я хочу сравнить эти два ArrayList : public static ArrayList

  • > arrayList1 = new ArrayList
  • >(); public static ArrayList
  • >.

    Я хочу утверждать, что два списка объектов одного типа совпадают по значениям свойств этого объекта. Например, у меня есть два списка объектов Person, которые имеют свойства first, last и middle.

    Я пытаюсь сравнить два списка с логикой короткого замыкания, чтобы, если один список короче другого, остановить сравнение и вернуть True. Я хотел бы знать, является ли то, что у меня есть.

    У меня есть список ответов, полученных от пользователей, как показано ниже: List lstGetUserAnswerIndex = new List (); А класс UserAnswerToQue-это как.

    Источник

    Java Сравнить два значения объекта List?

    У меня два списка * *ListA listA = new ArrayList () ** а также ListB listB = new ArrayList () оба содержат объект типа MyData, а MyData содержит эти переменные.

    ListA и ListB оба содержат объекты MyData, теперь я должен сравнить оба значения объекта списка здесь name, а также проверить переменную, как если бы ListA содержал эти значения объекта

    и ListB также содержат

    тогда я должен сравнить списки и вернуть false, потому что оба списка одинаковы, но если ListA содержит

    и ListB содержат

    тогда я должен сравнить списки и вернуть истину, потому что оба списка не совпадают

    или наоборот, поэтому любое небольшое изменение в любых значениях списка я должен вернуть true. Одна вещь, которую я должен упомянуть здесь объекты могут быть в любом порядке.

    13 ответов

    Я получил это решение для вышеуказанной проблемы

    Редакция:-
    Как мы можем это охватить. Представьте, что у вас есть два массива «A»,true «B»,true «C»,true и «A»,true «B»,true «D»,true. Даже если у массива один есть C, а у массива два есть D, нет никакой проверки, которая поймает это (Упоминается @Patashu). Итак, для этого я внес изменения ниже.

    Это не самое эффективное решение, но самый краткий код будет:

    Обновить:

    @ УэслиПортер прав. Решение выше не будет работать, если дубликаты объектов находятся в коллекции.
    Для полного решения вам нужно перебрать коллекцию, чтобы дублированные объекты обрабатывались правильно.

    Обновление 28 октября 2014:

    @ RoeeGavriel прав. Оператор возврата должен быть условным. Код выше обновляется.

    ArrayList уже есть поддержка этого, с equals метод. Цитирование документов

    . Другими словами, два списка определены как равные, если они содержат одинаковые элементы в одинаковом порядке.

    Это требует от вас, чтобы правильно реализовать equals в вашем MyData учебный класс.

    редактировать

    Вы обновили вопрос о том, что списки могут иметь разные порядки. В этом случае сначала отсортируйте список, а затем примените равенства.

    Источник