我创建了一个数组并尝试使用流来查找第一个奇数,如下所示:
int[] arr = new int[]{2, 4, 6, 8, 9, 12};
int oddOne = Stream.of(arr).filter(i -> i % 2 != 0).findFirst().get();
// fails above
Error: | incompatible types: int[] cannot be converted to int
我做错了什么?我该如何解决这个问题?
Arrays.stream()
:
Arrays.stream(arr).filter(i -> i % 2 != 0).findFirst().getAsInt();
其中:
返回一个连续的
,以指定数组作为其源。IntStream
Stream.of(T t)
,它简单地:
返回包含单个元素的连续
。Stream
所以它只是单个
Stream
的
int[]
正如空指针所指出的,在不确保
get()
中实际上存在奇数的情况下调用 Array
将导致错误。如果不存在奇数,最好使用 orElse()
返回默认值
您正在尝试访问
int[]
,而不是 int
内的 filter
eger。解决这个问题的一种方法是在 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.
如果此OptionalInt中存在值,则返回该值,否则抛出NoSuchElementException。
因此,
@nullpointer
建议始终建议使用orElse(int other)
public int orElse(int other)
Varargs 很棘手。
Stream.of()
的签名是Stream.of(T ...arg)
。
其中 T 可以是任何类。但是您传递的原生 int
数组不起作用。相反,它认为整个数组是一个对象。
当您使用本机类型数组时就会出现问题。
您的代码给出了仅包含一个 int[]
类型元素的流。
你更可以使用:
Integer[] arr = new Integer[]{2, 4, 6, 8, 9, 12};
您可以简单地使用它或按照其他人的建议使用
Arrays.stream(arr)
。
公共类 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);
}
//这个可以用来求奇数之和 公共类 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);
}
//这个可以用来求偶数之和