Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java-8: boolean primitive array to stream?

There is no nice way to convert given boolean[] foo array into stream in Java-8 in one statement, or I am missing something?

(I will not ask why?, but it is really incomprehensible: why not add stream support for all primitive types?)

Hint: Arrays.stream(foo) will not work, there is no such method for boolean[] type.

like image 523
Andremoniy Avatar asked Feb 14 '17 11:02

Andremoniy


2 Answers

Given boolean[] foo use

Stream<Boolean> stream = IntStream.range(0, foo.length)                                   .mapToObj(idx -> foo[idx]); 

Note that every boolean value will be boxed, but it's usually not a big problem as boxing for boolean does not allocate additional memory (just uses one of predefined values - Boolean.TRUE or Boolean.FALSE).

like image 136
Tagir Valeev Avatar answered Sep 20 '22 21:09

Tagir Valeev


You can use Guava's Booleans class:

Stream<Boolean> stream = Booleans.asList(foo).stream(); 

This is a pretty efficient way because Booleans.asList returns a wrapper for the array and does not make any copies.

like image 44
ZhekaKozlov Avatar answered Sep 18 '22 21:09

ZhekaKozlov