当前位置: 首页 > 知识库问答 >
问题:

使用Java8按list:java类型的object属性对对象列表进行分组

洪飞龙
2023-03-14

我有一个像

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 }

共有1个答案

富昕
2023-03-14

看看这里和这里

此代码片段创建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}
 类似资料: