javajava-streamreduce

'cannot find symbol error' when attempting to use .stream() on array in Java


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;  
  }

}

Solution

  • 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.