我正在尝试如下代码
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();
但这给了我错误
| 错误: | 二进制运算符 '%' 的错误操作数类型 | 第一 类型: int[] | 第二种类型:int | int oddInAll = Arrays.stream(mat).filter(i -> i%2 != 0).findFirst().getAsInt(); |
^---^| 错误: | 找不到符号 | 符号: 方法 getAsInt() |
int oddInAll = Arrays.stream(mat).filter(i -> i%2 != 0).findFirst().getAsInt(); |
^-------------------------------------------------------------^
这次我错过了什么?
好吧,在这种情况下,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
相似
在上述解决方案中,迭代一维数组和二维数组的语法保持不变。
差异
我为一维数组共享的解决方案利用了输入中提供的 T int[]
Stream.of(T t)
。另一方面,为二维数组建议的解决方案利用了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();