趙Binjie:
私は、次のデータ(クラス構造)を持っています:
[
{
"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
、同様のカウントCollectors.filtering
のJava-9 +あなたのような実装を提供して:
Map<String, Long> aCountMap = List.of().stream()
.collect(Collectors.groupingBy(A::getName,
Collectors.filtering(A::isEnable,
Collectors.counting())));