использование java 8 для группировки списка объектов по атрибуту объекта типа list: JAVA - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть объект типа

public class User {

    private String id;
    private List<String> brands_ids;
}

, и у меня есть список объектов пользователя, таких как: пример данных

[
  {
    "id": 1,
    "brands_ids": [
      10,
      20,
      30
    ]
  },
  {
    "id": 2,
    "brands_ids": [
      10,
      50
    ]
  },
  {
    "id": 3,
    "brands_ids": [
      10,
      80
    ]
  }
]

Мой вопрос: как сгруппировать этот список, чтобы узнать в какие объекты появляется идентификатор бренда, например, идентификатор бренда = 10 появляется во всех трех объектах, идентификатор бренда = 30 только в одном объекте

результат карты с ключом = идентификатором бренда и значением = счетчиком может решить моя проблема примерно такая: {10: 3}, {20: 1}, {30,1}, {50,1}, {80,1}

1 Ответ

4 голосов
/ 04 февраля 2020

Взгляните здесь и здесь

Этот фрагмент кода создает 3 пользователей, как в вашем примере.

    var users = Arrays.asList(
            new User("1", Arrays.asList("10", "20", "30")),
            new User("2", Arrays.asList("10", "50")),
            new User("3", Arrays.asList("10", "80")));

    Map<String, Long> result = users
            .stream()
            .flatMap(user -> user.getBrand_ids().stream())
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

    System.out.println(result);
    // Result is: {80=1, 50=1, 30=1, 20=1, 10=3}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...