Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java: making List from primitive array using Stream API

I'm trying to make a List from a primitive array

int[] values={4,5,2,3,42,60,20};
List<Integer> greaterThan4 =
Arrays.stream(values)
        .filter(value -> value > 4)
        .collect(Collectors.toList());

But the last function collect gives me an error because it wants other arguments. It wants 3 arguments Supplier, ObjIntConsumer and BiConsumer.

I don't understand why it wants 3 arguments when I have seen different examples that just use collect(Collectors.toList()); and get the list.

What I'm doing wrong?

like image 384
chnging Avatar asked Dec 05 '22 04:12

chnging


2 Answers

Yes this is because Arrays.stream returns an IntStream. You can call boxed() to get a Stream<Integer> and then perform the collect operation.

List<Integer> greaterThan4 = Arrays.stream(values)
                                   .filter(value -> value > 4)
                                   .boxed()
                                   .collect(Collectors.toList());
like image 128
Alexis C. Avatar answered Dec 19 '22 12:12

Alexis C.


You're using an array of primitives for one thing, not Integer. I suggest you use Arrays.asList(T...) like

Integer[] values={4,5,2,3,42,60,20};
List<Integer> al = new ArrayList<>(Arrays.asList(values));
like image 26
Elliott Frisch Avatar answered Dec 19 '22 14:12

Elliott Frisch