我可以使用如下代码进行转换:
Object[] array = (Object[]) message.get(key);
boolean[] result = new boolean[array.length];
for (int i = 0; i < array.length; i++) {
result[i] = (boolean) array[i];
}
但是,我认为可以使用 Java 8 流进行相同的转换。我开始编写这样的代码:
boolean[] = Arrays.stream(array)
.map(Boolean.class::cast)
.map(Boolean::booleanValue)
.toArray()
但是这段代码不起作用。编译器说
incompatible types: java.lang.Object[] cannot be converted to boolean[]
我试图了解代码有什么问题。我认为 map(Boolean::booleanValue)
会返回我可以使用 toArray
收集的 boolean 值流。
最佳答案
不,因为 map(Boolean::booleanValue)
扩展为
map((Boolean value) -> (Boolean)value.booleanValue());
(注意编译器插入的自动装箱,因为传递给 map()
的函数必须返回一个 Object
,而不是 boolean
)
这就是为什么 Java8 流包含一大堆专门的类(IntStream
、LongStream
和 DoubleStream
)。遗憾的是,boolean
没有专门的流类。
关于java - 使用流将 boolean 值的 Object[] 转换为 boolean[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507509/