6 java arrays lambda java-8 java-stream
我正在尝试如下代码
int[][] mat = new int[][]{new int[]{2,4,6}, new int[]{8,9,12}};
int oddInAll = Arrays.stream(mat).filter(i -> i%2 != 0).findFirst().getAsInt();
Run Code Online (Sandbox Code Playgroud)
但这给了我错误
| 错误:| 二元运算符'%'|的坏操作数类型 第一种类型:int [] | 第二种类型:int | int oddInAll = Arrays.stream(mat).filter(i - > i%2!= 0).findFirst().getAsInt(); |
^ ^ ---| 错误:| 找不到符号| symbol:方法getAsInt()|
int oddInAll = Arrays.stream(mat).filter(i - > i%2!= 0).findFirst().getAsInt(); |
^ ------------------------------------------------- ------------ ^
这次我错过了什么?
Nam*_*man 10
那么,Arrays.Stream
在这种情况下会导致你i
的类型int[]
无法使用filter
.
我建议使用我之前为此操作分享的类似示例.
int oddOrMin = Stream.of(arr) // Stream<int[]> and not integers
.flatMapToInt(Arrays::stream) // IntStream
.filter(i -> i % 2 != 0)
.findFirst() // OptionalInt
.orElse(Integer.MIN_VALUE); //default to some value
Run Code Online (Sandbox Code Playgroud)
在上述解决方案中,迭代一维和二维阵列的语法保持相同.
该解决方案,我会共享一维阵列利用Stream.of(T t)
其中T被int[]
输入所提供.另一方面,建议用于二维阵列的解决方案利用Stream.of(T... values)
了int[][]
被认为是的地方int[]...
,因此T评估int[]
为最终创建一个Stream<int[]>
.
请改用flatMapToInt:
int oddInAll = Arrays.stream(mat).flatMapToInt(Arrays::stream)
.filter(i -> (i % 2 != 0)).findFirst().getAsInt();
Run Code Online (Sandbox Code Playgroud)