我有一个ArrayList list
,其中包含值90, 80, 75
,我想将其转换为IntStream。
我尝试过使用函数list.stream()
,但我遇到的问题是当我尝试使用lambda时如下:
list.stream().filter(x -> x >= 90).forEach(System.out.println(x);
它不允许我执行操作,因为它是常规流,而不是IntStream。基本上这条线应该做的是,如果90在列表中打印出来。
我在这里错过了什么?我无法弄清楚如何将Stream转换为IntStream。
答案 0 :(得分:4)
使用mapToInt
作为
list.stream()
.mapToInt(Integer::intValue)
.filter(x -> x >= 90)
.forEach(System.out::println);
答案 1 :(得分:0)
您可以使用IntStream
将流转换为.mapToInt(Integer::intValue)
,但前提是该流的类型为Stream<Integer>
,这意味着您的源列表为List<Integer>
。
在这种情况下,没有理由
list.stream().filter(x -> x >= 90).forEach(System.out::println);
不应该工作。使用IntStream
甚至不太可能提高此特定任务的性能。
原始代码不起作用的原因是.forEach(System.out.println(x);
在语法上不正确。首先,缺少一个闭合支撑。其次,System.out.println(x)
既不是lambda表达式,也不是方法引用。你必须使用其中一个
.forEach(x -> System.out.println(x));
或.forEach(System.out::println);
。换句话说,该错误与通用Stream
而不是IntStream
这一事实无关。