2015-01-17 3 views
0

Любой умный способ преобразования целочисленного массива в булевский массив, учитывая, что int[] содержит только 1 s и 0 s?Convert int [] to boolean []

То есть, конвертировать:

[0, 0, 1, 0, 0, 0, 1, 1] 

в

[false, false, true, false, false, false, true true] 

Конечно, я могу цикл над int[], но мне интересно, если есть что-то более изящное там? Может быть, что-то вроде (new int[]{0, 0, 1, 0, 0, 0, 1, 1}) * true?

+0

Нет нет элегантный способ сделать это – engineercoding

+0

В Java 8 вы можете использовать поток. map –

+0

@codequestioneer существует с момента появления Java 8, но результатом является 'Boolean []' не 'boolean []'. –

ответ

0

Использования Java-можно легко преобразовать в Boolean[] с чем-то вроде

Boolean[] bools = Arrays.stream(ints) 
     .mapToObj(i -> i == 1) 
     .toArray(Boolean[]::new); 

Но нет аккуратного способа создания boolean[].

1

Как отмечали другие, подход потоков может содержать только массивы ссылочного типа, поэтому результат должен быть массивом значений Boolean в штучной упаковке.

Вот что я хотел бы сделать вместо:

int[] intArray = { 0, 0, 1, 0, 0, 0, 1, 1 }; // input 

boolean[] boolArray = new boolean[intArray.length]; 
IntStream.range(0, intArray.length).forEach(i -> boolArray[i] = intArray[i] != 0); 

Да, это побочный effecty, но какого черта. Это по существу то, что Arrays.setAll(boolean[]) будет делать, если оно существует, но оно существует только для обычного трио int, long и double.

(Это не требует Java 8.)