2015-01-17 239 views
0

在給定保證int[]只包含1 s和0 s的情況下,將整數數組轉換爲布爾值數組的任何聰明方法?將int []轉換爲布爾值[]

也就是說,轉換:

[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以來就有了,但結果是一個布爾[]不是'布爾[]'。 –

回答

0

使用Java 8,你可以很容易地轉換成Boolean[]喜歡的東西

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

但沒有巧妙的方法來創建一個boolean[]

1

正如其他人已經注意到的,stream方法只能引用類型的數組,所以結果必須是一個盒裝的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,longdouble

(這需要Java 8)