Как сравнить два массива, содержащих объекты с общими свойствами - PullRequest
1 голос
/ 15 мая 2019

Как сравнить два объекта, содержащего массив, с общими свойствами.

Пример: у меня есть класс pojo Abc

Class Abc {
String dataString ;
int rowNum;
......
}

Abc list1 contains - 2000 records & more sometimes
Abc list2 contains - 60 records & more sometimes

Я хочу сравнить list1 dataString со списком данных list2 и вернуть rownum, еслиlist1.dataString Notequals list2.dataString

Мне нужен rowNumber из List1, если строка данных НЕ СООТВЕТСТВУЕТ.List2 Rownum можно игнорировать.

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

В терминах высокого уровня ваш код должен:

  • перебрать список1
  • для каждого элемента проверьте, появляется ли его строка данных где-нибудь в списке2
  • если это так, включить в результат номер строки элемента list1

Чтобы сделать код быстрым, на втором шаге можно предварительно вычислить набор строк данных list2. Все еще в терминах высокого уровня, код:

List<int> filtered(List<Abc> list1, List<Abc> list2) {
    var dataStrings = setOf(list2.map(x -> x.dataString));

    var abcs = list1.filter(x -> dataStrings.contains(x.dataString));

    return abcs.map(x -> x.rowNum);
}

В стандартной Java код выглядит более раздутым, конечно:

List<int> filtered(List<Abc> list1, List<Abc> list2) {
    Set<String> dataStrings = list2.stream()
        .map(x -> x.dataString))
        .collect(Collectors.toSet());

    return list1.stream()
        .filter(x -> dataStrings.contains(x.dataString))
        .map(x -> x.rowNum)
        .collect(Collectors.toList());
}
0 голосов
/ 15 мая 2019

Если в этом случае у вас есть два разных списка и вы хотите провести сравнение, одним из простых способов сделать это может быть два цикла foreach с условием равенства и затем значение:

for(Abc list1Obj : list1)
{
      for(Abc list2Obj : list2)
      {
          if(list1.dataString.Equals(list2.dataString))
          {
              int value = Integer.parseInt(list1.rowNumber);
          }
      }
}

В этом случае это будет для каждого элемента в списке list1 с каждым элементом в списке list2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...