当前位置: 首页 > 知识库问答 >
问题:

为什么对这个java流进行两次操作?

卜高超
2023-03-14

Java8 API说:

Stream<Integer> stream = Stream.of(1,2,3);
stream.filter( x-> x>1 );
stream.filter( x-> x>2 ).forEach(System.out::print);

共有1个答案

冯星阑
2023-03-14

发生这种情况是因为您忽略了filter的返回值。

Stream<Integer> stream = Stream.of(1,2,3);
stream.filter( x-> x>1 ); // <-- ignoring the return value here
stream.filter( x-> x>2 ).forEach(System.out::print);

stream.filter返回一个新的stream,由该流中与给定谓词匹配的元素组成。但需要注意的是,这是一个新的流。当过滤器被添加到它时,旧的一个已经被操作了。但新的不是。

引用streamJavadoc:

因此这段代码可以正常工作:

Stream<Integer> stream = Stream.of(1,2,3);
stream = stream.filter( x-> x>1 ); // <-- NOT ignoring the return value here
stream.filter( x-> x>2 ).forEach(System.out::print);

正如Brian Goetz所指出的,您通常会将这些调用连接在一起:

Stream.of(1,2,3).filter( x-> x>1 )
                .filter( x-> x>2 )
                .forEach(System.out::print);
 类似资料:
  • 问题内容: 最近升级到Spark 2.0,尝试从JSON字符串创建简单的数据集时遇到一些奇怪的行为。这是一个简单的测试用例: 并输出: 即使我仅执行一项操作,“ map”功能似乎仍被执行两次。我以为Spark会懒惰地建立一个执行计划,然后在需要时执行它,但这似乎使得为了将数据读取为JSON并对其进行任何处理,该计划必须至少执行两次。 在这种简单的情况下,这并不重要,但是当map函数长时间运行时,这

  • 此组件渲染两次并抛出错误。我知道这个错误是因为它们在reduce函数中没有返回语句。但我不明白的是,为什么它会渲染两次? 此外,当我删除代码时,它只呈现一次。据我所知,一个组件只能在四种情况下重新渲染 状态的变化 道具的变化 强制渲染 父母重新渲染。 在我的例子中,父组件没有重新渲染(我通过在父组件中使用console.log检查了它),并且这个组件是无状态的,没有道具被传递给它。有人能解释一下这

  • 我发现这样的php代码: 我希望这个循环会执行4次,因为$I变成了对$的引用(对吗?)。然而,循环只执行一次,并输出: a=10,i=10 我不明白为什么它会这样工作。有什么想法吗?

  • 我正在使用一个3d party库,它们返回缺少类型规范的集合(例如,

  • 不过,我可以在01:00的视频中复制问题。这意味着当我安装带有身份验证的Laravel时,如果我在登录表单中单击提交按钮两次,Firefox将发送2个请求。 为什么在多次单击按钮时,Firefox有时发送多个请求,而有时只发送一个? 我有一个用户表 如果我在按钮上单击两次(或二十次)提交表单,那么数据库中只有一个新行。 为什么会这样?我希望,如果我多次单击submit按钮,那么表单将发送多个请求,

  • 所以我有这行代码。它给了我输出[6,28]。你们知道为什么吗?我不知道有人想打印什么样的数字。