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

Java 8修改流元素

通飞尘
2023-03-14

我想用Java 8编写纯函数,它将集合作为参数,对集合每个对象应用一些更改,并在更新后返回一个新集合。我希望遵循FP原则,所以我不希望更新/修改作为参数传递的集合。

有没有什么方法可以通过Stream API做到这一点,而不首先创建原始集合的副本(然后使用forEach或'normal'for循环)?

下面的示例对象,并假设我要将文本追加到object属性之一:

public class SampleDTO {
    private String text;
}

所以我想做一些类似下面的事情,但不修改集合。假设“list”是列表

list.forEach(s -> {
    s.setText(s.getText()+"xxx");
});

共有1个答案

高功
2023-03-14

您必须具有生成现有sampledTo实例的副本的方法/构造函数,例如复制构造函数。

然后,您可以将每个原始SampledTo实例映射到新的SampledTo实例,并将它们收集到新的列表:

List<SampleDTO> output = 
    list.stream()
        .map(s-> {
                     SampleDTO n = new SampleDTO(s); // create new instance
                     n.setText(n.getText()+"xxx"); // mutate its state
                     return n; // return mutated instance
                 })
       .collect(Collectors.toList());
 类似资料:
  • 我试图列出整数列表中的重复元素,例如, 使用jdk 8的流。有人试过吗?要删除重复项,我们可以使用distinct() api。但是如何找到重复的元素呢?有人能帮我吗?

  • 有一个简单的: 以及任务对象的列表。如何通过使用获得每个作为的列表。我试过这个: 但它返回

  • 我有一个我搜索的对象,该对象存储在一个流中。我想让用户能够修改现有流中的元素,并用修改后的元素更新现有列表,而不是创建一个新的列表。这个问题与这个问题相似,只是用户正在将修改后的元素添加到一个新的列表中 项目类别

  • 我有一个java流,其中我必须只对一些对象应用操作,但我希望得到具有相同元素数的流。例如 我有用户类。 我想增加50个现有余额为500或以上的用户的余额。在返回列表中,我还需要未修改余额的用户, 回报应该是 和原来的顺序一样,但是记录被修改了,这符合条件。任何想法我怎么能用流和功能方式做到这一点,没有如果,等等 我尝试了方法,但它只是将过滤后的值传递到下游。

  • 我有以下几门课: 我有一个物品清单。我想遍历列表并找到具有特定ID的实例。我试着通过溪流来做。

  • 假设我有这样一个列表: 是否可以使用Java8流从该列表中每隔一秒获取一个元素以获得以下内容? 或者甚至每三个元素? 基本上,我正在寻找一个函数来获取流的每n个元素: