2017-02-16 8 views
1

タイプが単純なenum値である2つのフィールドで構成される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

あなたは 'Combination'に対するアクセサがどのようなものがあり、アルゴリズム – AdamSkywalker

+0

のアイデアを得るためにforループを開始することができますか? – 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

ありがとう、それは私のために働いた:) –

関連する問題