2015-01-17 160 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)