Comment faire la somme des valeurs dans la liste en utilisant Java 8

je veux trouver la somme de l' List<int[]> utilisation de Java 8. Voici ma tentative.

int sum = counts.stream().flatMap(i -> Stream.of(i).mapToInt(m)).sum();

Cependant, j'obtiens l'erreur ne peut pas convertir à Stream<Object><unknown>.

21
demandé sur azurefrog 2017-12-28 22:28:00

5 réponses

vous voulez flatMap à un IntStream. Après cela, prendre la somme est facile.

int sum = counts.stream()
        .flatMapToInt(IntStream::of)
        .sum();
31
répondu Ward 2017-12-28 19:36:11
int sum = counts.stream().flatMapToInt(array -> IntStream.of(array)).sum();
14
répondu JB Nizet 2017-12-28 19:35:10

i est un tableau primitif (int[]), donc Stream.of(i) retour Stream<int[]>.

je vous suggère d'abord de calculer la somme de chaque tableau individuel et ensuite de les additionner tous:

int sum=counts.stream()
              .mapToInt(ar->IntStream.of(ar).sum()) // convert each int[] to the sum 
                                                    // of that array and transform the
                                                    // Stream to an IntStream
              .sum(); // calculate the total sum
7
répondu Eran 2017-12-28 20:10:48

Vous pouvez le faire de cette façon:

int sum = counts.stream()                               // getting Stream<int[]>
                .mapToInt(a -> Arrays.stream(a).sum())  // getting an IntStream with the sum of every int[]
                .sum();                                 // getting the total sum of all values.
5
répondu Juan Carlos Mendoza 2017-12-29 13:24:19

Cela a fonctionné pour moi:

int sum = counts.stream().mapToInt(i -> Arrays.stream(i).sum()).sum();
2
répondu Cardinal System 2017-12-28 19:47:10