Rob*_*off 5 java lambda java-8 java-stream
我正在学习流表达式并尝试使用它们来构造一个 2D 布尔数组,所有值都设置为 true。就像是:
boolean[][] bool_array = [stream expression returning a
2D array boolean[h][w], all values set to true]
Run Code Online (Sandbox Code Playgroud)
这是可能的,表达式是什么?
我知道int[][]可以使用流创建数组,例如
int h=5;
int w=8;
int[][] int_array = IntStream.range(0,h).mapToObj(i->IntStream.range(0,w).
map(j->1).toArray()).toArray(int[][]::new);
Run Code Online (Sandbox Code Playgroud)
返回一个int[5][8]充满的。但试图让它为之工作boolean[][]
boolean[][] bool_array = IntStream.range(0,h).mapToObj(i->IntStream.range(0,w).
mapToObj(j->true).toArray()).toArray(boolean[][]::new);
Run Code Online (Sandbox Code Playgroud)
抛出一个ArrayStoreException.
Mak*_*oto -5
使用循环更方便。Lambda 语句和流并没有从根本上取代循环,并且在这种情况下使用循环所获得的简单性要简单得多,并且更容易处理。
请注意,我的回答也是基于学习 lambda 表达式。当它们第一次出现时,我也认为它们可以做很多循环可以做的事情。 然而,学习新工具或方法还包括学习何时不使用它,而一般迭代绝对不是 lambda 适合用途的情况。