[英]How to easily implement conditional count in groupby using Java Stream
我有以下數據(一個類結構):
[
{
"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())));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.