gpt4 book ai didi

java - 如何使用Java Stream轻松实现groupby中的条件计数

转载 作者:行者123 更新时间:2023-12-01 19:28:13 24 4
gpt4 key购买 nike

我有以下数据(类结构):

[
{
"name": "a",
"enable": true
},
{
"name": "a",
"enable": false
},
{
"name": "b",
"enable": false
},
{
"name": "b",
"enable": false
},
{
"name": "c",
"enable": false
}
]

如何用简单的代码替换下面的复杂代码:

List<A> list = xxxxx;
Map<String, Integer> aCountMap = new HashMap<>();
list.forEach(item -> {
Integer count = aCountMap.get(item.getName());
if (Objects.isNull(count)) {
aCountMap.put(item.getName(), 0);
}
if (item.isEnable()) {
aCountMap.put(item.getName(), ++count);
}
});

正确结果如下:

{"a":1}
{"b":0}
{"c":0}

最佳答案

您可能只是对按条件过滤的对象进行计数:

Map<String, Long> aCountMap = list.stream()
.filter(A::isEnable)
.collect(Collectors.groupingBy(A::getName, Collectors.counting()));

但是由于您也在寻找 0 计数,因此 Java-9+ 的 Collectors.filtering 为您提供了如下实现:

Map<String, Long> aCountMap = List.of().stream()
.collect(Collectors.groupingBy(A::getName,
Collectors.filtering(A::isEnable,
Collectors.counting())));

关于java - 如何使用Java Stream轻松实现groupby中的条件计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60768406/

24 4 0