This code works (taken in the Javadoc):
List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", "));
This one can't be compiled:
int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -> i.toString()) .collect(Collectors.joining(", "));
IDEA tells me I have an "incompatible return type String in lambda expression".
Why ? And how to fix that ?
The map() function is a method in the Stream class that represents a functional programming concept. In simple words, the map() is used to transform one object into another by applying a function. That's the reason the Stream.
Program 1: Arrays. stream() to convert string array to stream. Program 2: Arrays. stream() to convert int array to stream.
stream() method only works for primitive arrays of int[], long[], and double[] type, and returns IntStream, LongStream and DoubleStream respectively. For other primitive types, Arrays. stream() won't work.
Arrays.stream(int[])
creates an IntStream
, not a Stream<Integer>
. So you need to call mapToObj
instead of just map
, when mapping an int
to an object.
This should work as expected:
String commaSeparatedNumbers = Arrays.stream(numbers) .mapToObj(i -> ((Integer) i).toString()) //i is an int, not an Integer .collect(Collectors.joining(", "));
which you can also write:
String commaSeparatedNumbers = Arrays.stream(numbers) .mapToObj(Integer::toString) .collect(Collectors.joining(", "));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With