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
возвращает оболочку для массива и не делает никаких копий.