java - 使用流将 boolean 值的 Object[] 转换为 boolean[]

标签 java arrays java-stream

我可以使用如下代码进行转换:

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 流包含一大堆专门的类(IntStreamLongStreamDoubleStream)。遗憾的是,boolean 没有专门的流类。

关于java - 使用流将 boolean 值的 Object[] 转换为 boolean[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507509/

相关文章:

java - 如何将不同的值传递给 ExecutorService 中的每个线程?

Java Web Start 显示 "launched from downloaded JNLP file"

javascript - 如何使用jquery排除数组中的空值和键?

Python数组转换为字符串

javascript - 更改数组中的元素位置并在其间移动元素

java - 可选择对流应用过滤器

java - 为什么在将 List 转换为 MultiKeyMap 时不会出现编译错误?

java - 一个进程一次可以使用或绑定(bind)多少个端口?

java - 检查一个数组列表是否包含两个字符串

Java 8 stream.collect(Collectors.groupingBy()) 在 JPA 获取的列表/对象上使用时返回大小为 0 的映射