我创建了一个数组,并尝试使用流来查找第一个奇数,代码如下:
int[] arr = new int[]{2, 4, 6, 8, 9, 12};
int oddOne = Stream.of(arr).filter(i -> i % 2 != 0).findFirst().get();
// fails above
错误: | 不兼容的类型: 无法将int[]转换为int
我做错了什么?我该如何修复它?
我创建了一个数组,并尝试使用流来查找第一个奇数,代码如下:
int[] arr = new int[]{2, 4, 6, 8, 9, 12};
int oddOne = Stream.of(arr).filter(i -> i % 2 != 0).findFirst().get();
// fails above
错误: | 不兼容的类型: 无法将int[]转换为int
我做错了什么?我该如何修复它?
您需要使用 Arrays.stream()
:
Arrays.stream(arr).filter(i -> i % 2 != 0).findFirst().getAsInt();
Which:
返回以指定数组为源的顺序
IntStream
。
目前您正在使用重载方法Stream.of(T t)
,它只是简单地:
返回包含单个元素的顺序
Stream
。
因此它只是一个由单个int[]
组成的Stream
另外,正如nullpointer所指出的,如果没有确保在Array
中实际存在奇数,则调用get()
将导致错误。最好使用orElse()
来返回默认值,如果没有奇数则返回该值。
int
而不是 int[]
。解决这个问题的一种方法是使用 IntStream
并结合 flatMapToInt
,如下所示: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
你可以简单地使用 IntStream
来流式处理 int[]
。
int[] arr = new int[]{2, 4, 6, 8, 9, 12};
int result = IntStream.of(arr).filter(i->i%2 !=0).findFirst().getAsInt();
System.out.println(result); //9
public int getAsInt()
会抛出NoSuchElementException
。orElse(int other)
。
public int orElse(int other)
可变参数很棘手。 Stream.of()
的签名是 Stream.of(T ...arg)
,其中 T 可以是任何类。但是您正在传递一个原生 int
数组,这不起作用。相反,它认为整个数组是一个对象。
当您使用原生类型的数组时会出现问题。
您的代码提供了一个类型为 int[]
的单一元素流。
您可以改为使用:
Integer[] arr = new Integer[]{2, 4, 6, 8, 9, 12};
Arrays.stream(arr)
。public class EvenNumberSum {
public static int sumEvenNumbers(int[] array) {
return Arrays.stream(array)
.filter(num -> num % 2 == 0)
.sum();
}
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result = sumEvenNumbers(numbers);
System.out.println("Sum of even numbers: " + result);
}
//This can be used to sum odd numbers
public class EvenNumberSum {
public static int sumEvenNumbers(int[] array) {
return Arrays.stream(array)
.filter(num -> num % 2 != 0)
.sum();
}
public static void main(String[] args) {
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int result = sumEvenNumbers(numbers);
System.out.println("Sum of even numbers: " + result);
}
//This can be used to sum even numbers
Arrays.stream(arr)
开始,没有必要创建一个Stream<int[]>
(只有一个单一元素),然后再创建一个IntStream
。 - undefined