【问题标题】:using java 8 to group list of object by object attribute of type list: JAVA使用java 8按类型列表的对象属性对对象列表进行分组:JAVA
【发布时间】:2020-05-20 17:29:15
【问题描述】:

我有一个类似的对象

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
    ]
  }
]

我的问题是,如何对这个列表进行分组以了解品牌 ID 出现在哪些对象中,例如品牌 ID=10 出现在所有三个对象中,品牌 ID=30 仅出现在一个对象中

具有 key=brand id 和 value = count 的地图结果将解决我的问题 像这样:{10:3},{20:1},{30,1},{50,1},{80,1}

【问题讨论】:

  • 我很困惑。您只是想数一数,还是想通过某种方式询问 id 有哪些品牌?如果您尝试通过迭代用户对象列表对它们进行分组,请分享代码。

标签: java grouping


【解决方案1】:

看看herehere

此代码片段创建 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}

【讨论】:

  • 如果您使用 java 8,只需将 FROM: 'var users' 更改为 'List users'
  • 嗨@vas,我想知道如何将结果作为列表?
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多