假设我有一个称为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()));

10-07 22:52