在Java中流式传输到IntStream

时间:2018-03-22 01:40:37

标签: java lambda java-stream

我有一个ArrayList list,其中包含值90, 80, 75,我想将其转换为IntStream。
我尝试过使用函数list.stream(),但我遇到的问题是当我尝试使用lambda时如下:
list.stream().filter(x -> x >= 90).forEach(System.out.println(x);
它不允许我执行操作,因为它是常规流,而不是IntStream。基本上这条线应该做的是,如果90在列表中打印出来。

我在这里错过了什么?我无法弄清楚如何将Stream转换为IntStream。

2 个答案:

答案 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这一事实无关。