假设我有一个称为Combination的类,该类由两个字段组成,其类型是简单的枚举值。
例子:new Combination(Animal.DOG, Animal.CAT)
,new Combination(Animal.CAT, Animal.APE)
,new Combination(Animal.MOUSE, Animal.DOG)
我有一组组合,我想计算每只动物的总发生率,以便示例输出如下所示:
DOG=2
CAT=2
MOUSE=1
APE=1
我已经尝试过其他方法,但是还没有找到解决方案。在Java 8中有没有简单的方法可以做到这一点?
提前致谢。
最佳答案
这是一种方法:
Map<Animal, Long> counts = combinations.stream()
.flatMap(c -> Stream.of(c.getFirst(), c.getSecond()))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
或者:
Map<Animal, Long> counts = Stream.concat(
combinations.stream().map(Combination::getFirst),
combinations.stream().map(Combination::getSecond))
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));