2017-07-19 4 views
4

Disons que nous avons un tirage au sort de l'objet:java 8 liste groupingBy de la liste

class Draw { 

private int num1, num2, num3; 

public Draw (int num1, int num2, int num3) { 
    this.num1 = num1; 
    this.num2 = num2; 
    this.num3 = num3; 
} 

public int getNum1() { 
    return num1; 
} 

public void setNum1(int num1) { 
    this.num1 = num1; 
} 

public int getNum2() { 
    return num2; 
} 

public void setNum2(int num2) { 
    this.num2 = num2; 
} 

public int getNum3() { 
    return num3; 
} 

public void setNum3(int num3) { 
    this.num3 = num3; 
} 

public List<Integer> getResultAsList() { 
    return Arrays.asList(num1, num2, num3); 
} 

}

Maintenant, ayant Liste Draws, je dois obtenir une carte où la clé est un nombre nul et valeur est un compte (combien de fois ce nombre a été établi)

Par exemple, ayant

List<Draw> drawList = Arrays.asList(new Draw(1,2,5), new Draw(1,5,6)); 

Je veux obtenir une carte l Est-ce que je peux implémenter cela en utilisant les nouvelles opérations groupingBy de java 8 ou une autre nouvelle fonctionnalité?

Merci.

Répondre

2

Si je suis tout droit:

Map<Integer, Long> map = drawList 
     .stream() 
     .flatMap(x -> Stream.of(x.getNum1(), x.getNum2(), x.getNum3())) 
     .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); 

System.out.println(map); // {1=2, 2=1, 5=2, 6=1} 

Ou évidemment comme ceci:

Map<Integer, Long> map2 = drawList 
      .stream() 
      .flatMap(x -> x.getResultAsList().stream()) 
      .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); 
+0

Merci Eugenre. Le code n'est pas compilable. Je reçois "Impossible de déduire argument (s) de type pour flatMap (Fonction ) " – EasyRider

+1

@ user1712442 c'est intéressant, il compile juste bien pour moi avec' javac' – Eugene

+0

J'utilise Eclipse Neon . Mais j'ai trouvé le moyen de le rendre compilable: {Carte carte = drawList \t \t \t .stream() \t \t \t .flatMap (x -> x.getResultAsList() flux().) \t \t \t .collect (Collectors.groupingBy (Function.identity(), Collectors.counting())); System.out.println (map);} – EasyRider