6

I am attempting to implement the Java.stream() method to multiple a list of numbers together in Java 8. I have imported the java.util.stream*; package. The static method is set to return an int and take in an array. However, when I call .stream().reduce() on the array, I get the error:

error: cannot find symbol
    int count = x.stream().reduce(1, (a, b) -> a * b).sum();
                 ^
  symbol:   method stream()
  location: variable x of type int[]

How can I properly use the stream() method to multiple the values of the array together in order?

The class I have defined as:

import java.util.stream.*;
public class Kata{
  public static int grow(int[] x){
    int count = x.stream().reduce(1, (a, b) -> a * b).sum();
    return count;  
  }

}
Dog
  • 2,726
  • 7
  • 29
  • 66

2 Answers2

5

You need Arrays.stream to convert an array into a stream:

int count = Arrays.stream(x).reduce(1, (a, b) -> a * b);

The sum() step you were doing at the end doesn't make sense, because after reduce we are already left with just a single primitive integer. So I removed it.

Tim Biegeleisen
  • 502,043
  • 27
  • 286
  • 360
2

First convert array into List to stream it, or you can also use Arrays.stream(x) as @Tim Biegeleisen suggestion

Arrays.asList(x).stream(x).reduce(1, (a, b) -> a * b);
Ryuzaki L
  • 37,302
  • 12
  • 68
  • 98
  • isn't `Arrays.asList(x).stream().reduce(1, (a, b) -> a * b);` enough? I don't understand the use of the x passed as a parameter to stream – Aymane Hrouch Oct 30 '22 at 14:35