Java-8: булевой примитивный массив для потока?

Невозможно преобразовать заданный массив boolean[] foo в поток в Java-8 в одном выражении, или я что-то не хватает?

(я не буду спрашивать почему?, но это действительно непонятно: почему бы не добавить поддержку потока для всех примитивных типов?)

Подсказка: Arrays.stream(foo) не будет работать, такого типа для типа boolean[] нет.

Ответы

Ответ 1

Учитывая boolean[] foo используйте

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

Обратите внимание, что каждое булевское значение будет помещаться в бокс, но обычно это не большая проблема, так как бокс для boolean не выделяет дополнительную память (просто использует одно из предопределенных значений - Boolean.TRUE или Boolean.FALSE).

Ответ 2

Вы можете использовать класс Guava Booleans:

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

Это довольно эффективный способ, потому что Booleans.asList возвращает оболочку для массива и не делает никаких копий.