Java 8: фильтр 2 различных массивов JSON по определенным полям - PullRequest
0 голосов
/ 05 мая 2018

Это может быть глупо, но я не могу понять, у меня есть 2 разных массива JSON схемы.

массив JSON A

[
  {
     "name": "Robin",
     "uid": 1234   
  },  
  {
     "name": "Tom",
     "uid": 8768   
  },   
  {
     "name": "Eddy",
     "uid": 4534   
  }
]

массив JSON B

[
  {
     "group": "Reign",
     "admin": 8768   
  },  
  {
     "group": "Hounds",
     "admin": 1234   
  },   
  {
     "group": "Dukes",
     "admin": 5996   
  }
]

По существу значения uid в массиве JSON A и admin поля в массиве JSON B совпадают. Списки очень большие, поэтому итерация очень дорогая.

Моя задача - сопоставить элементы массива A с элементами массива B в соответствии с этими 2 полями (uid & admin). Также необходимо собрать лишние элементы Array A и лишние элементы Array B.

Что я сделал до сих пор

List<JsonObject> listOutput = jsonDataAList.stream()
                .filter(e -> jsonDataBList.stream()
                        .map(JsonDataA::getUid)
                        .anyMatch(admin -> admin.equals(e.getAdmin())))
                .collect(Collectors.toList());

Избиратели, пожалуйста, найдите время для любого объяснения

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Решил сам

private List<JsonObject> getExcessElements(List<JsonObject> primaryList, List<JsonObject> secondaryList, String primaryKey, String secondaryKey) {
List<JsonObject> excessInPrimary = primaryList.stream()
.filter(e -> (secondaryList.stream()
.filter(d -> d.get(secondaryKey).equals(e.get(primaryKey)))
.count()) < 1)
.collect(Collectors.toList());
return excessInPrimary;
}
0 голосов
/ 05 мая 2018

Если предположить, что uid уникально, я бы конвертировал оба Jsons в Map<Integer, String> и затем использовал бы следующий ответ

Вы можете использовать Гуава Maps.difference(Map<K, V> left, Map<K, V> right) метод. Возвращает MapDifference объект, который имеет методы для получения всех четырех видов записей карты:

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