2017-02-16 90 views
1

假設我有一個名爲Combination的類,它由兩個字段組成,它們是一個簡單的枚舉值。Java 8計數具有多個值的對象

實例:

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中做到這一點?

在此先感謝。

+0

您可以與循環得到一個算法 – AdamSkywalker

+0

什麼是'Combination'的訪問者的想法開始? – Compass

+0

您嘗試過哪些不同的方法? – Kayaman

回答

3

這裏有一種方法:

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())); 
+0

謝謝,那爲我工作:) –

相關問題