使用Stream从二维整数数组中查找奇数

时间:2018-12-24 05:45:53

标签: java arrays lambda java-8 java-stream

我正在尝试如下代码

$ cd /myTestingProject/node_modules/appium-xcuitest-driver/WebDriverAgent
$ ./Scripts/bootstrap.sh

但这给了我错误

  

|错误:二进制运算符'%'的错误操作数类型|第一   类型: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(); |
  ^ ------------------------------------------------- ------------ ^

这次我想念什么?

2 个答案:

答案 0 :(得分: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

相似性

在上述解决方案中,对一维和二维数组进行迭代的语法仍然相同。

差异

一维数组的解决方案that I'd shared使用了Stream.of(T t),其中 T是int[] ,如输入中所提​​供。另一方面,为二维数组建议的解决方案利用Stream.of(T... values),其中int[][]再次被认为是int[]...,因此 T的求值为{{1 }} 最终创建一个int[]

答案 1 :(得分:6)

改为使用flatMapToInt

void <OnEthRawPacket>( long channel, long dir, long packetLength );

long EthReceiveRawPacket( long flags, byte srcMacAddress[6], byte dstMacAddress[6], long ethernetType, char *callback );
相关问题