【发布时间】:2016-07-30 04:25:04
【问题描述】:
我可以使用如下代码进行转换:
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 收集的布尔值流。
【问题讨论】:
-
这不起作用,因为
Object[]和boolean[]是Java 中不可转换的类型,所以实际上Object[] = boolean[]也不起作用。 -
.toArray()这里是通用的,所以Object[]是你能做到的最好的。您可以编写自己的收集器返回boolean[]。 -
@SashaSalauyou 但是您可以使用
toArray(IntFunction<A[]> generator)返回一个类型化数组。我添加了一个答案作为示例。 -
这里有一个相关的讨论,为什么原始流仅限于某些类型:stackoverflow.com/questions/22435833/…(例如为什么没有
CharStream/BooleanStream/etc。就像有IntStream。 )
标签: java arrays java-stream