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

java流使用终端操作变异数据[重复]

籍靖
2023-03-14

Java流备忘单

根据这张Java流的备忘单,我知道Java流不能改变数据

例如,在下面使用的代码中,我说的对吗?使用forEach终端操作,数据正在发生变化?

List<Foo> fooList=new ArrayList<>();
fooList.stream()
.filter(foo-> return foo.getSomeBoolean())
.forEach(foo->{
  foo.setSomeBoolean(false);
});

我感到困惑的是,对于每个终端操作可以对数据产生副作用,但不会改变数据?

有人能解释一下Foreach是如何允许变异这里的数据的吗?

共有1个答案

闻人浩波
2023-03-14

您不能变异愚人,但可以使用终端操作对元素执行副作用。正如备忘单所说,流是一条管线,而不是一个数据结构。不能对非数据结构的内容进行变异,但可以操纵流经管道的各个元素。

 类似资料:
  • 问题内容: 任何人都可以告诉我在Java上下文中以下行的含义是什么: 除非变量是不可变的,否则仍然可以对其进行操作 据我所知,通过将任何变量声明为final,就无法再次对其进行更改,那么上一行中 不可变 一词的含义是什么? 问题答案: 这意味着,如果您的最终变量是引用类型(即不是像int这样的基元),则只有引用是不能更改的。不能使它引用不同的对象,但是如果类允许,它所引用的对象的字段仍可以更改。例

  • 我的想法是,我有一个特定的操作序列,我想应用于其他操作之间的几个流。流之间的其他操作不相同。 例如,对于每个流,我要更改字符串的大小写,修剪它,将空字符串清空,然后过滤掉空字符串,最后,消除重复,如下所示: 在这两种情况下,我都执行以下操作序列: 我当前复制了该链并将其放在多个流的其他操作之间: 有没有一个好的方法来避免重写那段代码呢?很明显,这两个map()操作是可能的,但是这种操作组合有什么办

  • 本文向大家介绍JAVA使用DBUtils操作数据库,包括了JAVA使用DBUtils操作数据库的使用技巧和注意事项,需要的朋友参考一下 摘要:本文主要学习了如何使用DBUtils在Java代码中更方便的操作数据库。 概述 DBUtils是Java编程中的数据库操作实用工具,小巧简单实用。 DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码。 使用 准备 如果需要使用DBUtil

  • 任何人都可以指向一个官方Java文档,该文档描述了流将调用每个元素的每个“无干扰和无状态”中间操作的次数。 例如: 以上代码当前将调用< code>check方法4次。 在JDK的当前或未来版本中,方法的执行次数是否可能多于或少于从List或任何其他标准JavaAPI创建的流中的元素数量?

  • 我有一个对象,“item”,字段为:int:id string:prices 字符串prices包含一个或多个由逗号分隔的价格值。 getStoresaIntList()从对象中的字符串价格返回价格值列表。 以上当然不是我想要的。

  • 问题内容: 考虑以下代码: 终端操作(如)是否关闭已打开的基础文件? 请参阅Files.list的javadoc的相关部分: 返回的流封装了DirectoryStream。如果需要及时处理文件系统资源,则应使用try-with- resources构造来确保在流操作完成之后调用流的close方法。 如果不调用,那么在生成可维护代码时最好的替代方法是什么? 问题答案: 终端操作员不会自动关闭流。考虑