Dav*_*iel 1 java lambda java-8
我试图通过使用lambda表达式实例化一个数组.
我试图使用的代码是:
public class Main {
static int x = 0;
public static void main(String[] args) {
Test[] t = (Test[]) Stream
.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
);
Run Code Online (Sandbox Code Playgroud)
我试图实例化的类名为Test:
public class Test {
int a, b;
Test(int a, int b) {
this.a = a;
this.b = b;
}
}
Run Code Online (Sandbox Code Playgroud)
我无法执行演员表,它引发了一个例外:
java.lang.ClassCastException:[Ljava.lang.Object; 不能被投射到[Lperson.Test; at person.Main.main(Main.java:37)Java返回:1
但是如果你看一下对象类:
该数组是"[Ljava.lang.Object;" 例
//class "[Ljava.lang.Object;"
System.out.println(
Stream.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
.toArray().getClass()
);
Run Code Online (Sandbox Code Playgroud)
数组的每个对象都是一个"Test"实例
//class "Test"
System.out.println(
Stream.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
.toArray()[0].getClass()
);
Run Code Online (Sandbox Code Playgroud)
您不能只是转换流并期望它成为一个数组.
使用A [] toArray(IntFunction生成器)方法.
Test[] a = Stream.generate(() -> new Test(x++, 0))
.limit(10)
.map((Test v) -> {
v.a = v.a * 2;
return v;
})
.toArray(Test[]::new);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |