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

将元素从流添加到现有列表的更好方法是什么?

邹嘉致
2023-03-14

我必须编写一些代码,将Java8流的内容多次添加到列表中,我很难找到最好的方法。根据我在SO上读到的内容(主要是这个问题:如何将Java8流的元素添加到现有列表中)和其他地方,我将其缩小到以下选项:

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;

public class Accumulator<S, T> {


    private final Function<S, T> transformation;
    private final List<T> internalList = new ArrayList<T>();

    public Accumulator(Function<S, T> transformation) {
        this.transformation = transformation;
    }

    public void option1(List<S> newBatch) {
        internalList.addAll(newBatch.stream().map(transformation).collect(Collectors.toList()));
    }

    public void option2(List<S> newBatch) {
        newBatch.stream().map(transformation).forEach(internalList::add);
    }
}

PS:在我的示例代码中,我使用transformation作为需要在流上执行的任何操作的占位符

共有1个答案

司徒翼
2023-03-14

最好的解决方案是第三个,完全避免内部列表。只需让流为您创建最终列表:

假设您有一个列表 > list,其中包含N个批处理,必须对其应用相同的转换,则可以执行以下操作

List<T> result = 
    batches.stream()
           .flatMap(batch -> batch.stream())
           .map(transformation)
           .collect(Collectors.toList());
 类似资料:
  • 问题内容: Collector的Javadoc显示了如何将流的元素收集到新的List中。有没有一种将结果添加到现有ArrayList中的方法? 问题答案: 注意: osid的答案 显示了如何使用来添加到现有集合。这是对现有集合进行变异的有用且有效的技术。我的答案解决了为什么您不应该使用A 来突变现有集合的原因。 简短的答案是 no ,至少在一般情况下不是这样,您不应该使用a 来修改现有集合。 原因

  • Collector的Javadoc展示了如何将流的元素收集到一个新列表中。是否有一个单行程序将结果添加到现有的ArrayList中?

  • 我创建了一个元素列表,我想更新其中一个列表元素 这是对update方法的调用: 这是更新方法: 在该方法中,我收到警告“从方法生成函数”,并建议“方法‘update\elem’可能是‘static’” 更新列表元素而不收到警告的正确方法是什么?

  • 问题内容: 我有一堆看起来像这样的列表: 我想交换元素如下: 列表的大小可能有所不同,但是它们将始终包含偶数个元素。 我对Python相当陌生,目前正在这样做: 我知道这不是真正的Pythonic,而是想使用更高效的工具。也许列表理解? 问题答案: 无需复杂的逻辑,只需通过切片和步骤重新排列列表即可: TLDR; 编辑带说明 我相信大多数观众已经熟悉列表切片和多重分配。如果您不这样做,我会尽力解释

  • 问题内容: 这个清单对象在咬我屁股。 每当我尝试向其中添加元素时,它都会产生以下结果: 产生错误的行无关紧要,但无论如何这里都是这样: 我不应该静态访问它吗? 变量的实际声明: 有任何想法吗?在Google上找不到任何值得的东西。 问题答案: Arrays.asList()将给您返回不可修改的列表,这就是为什么添加失败的原因。尝试使用以下方法创建列表:

  • 我应该如何编写允许我在数组中添加和删除数组项的补丁方法? 项目类别: 菜单模型: 我有一个菜单组件和一个菜单服务。我需要一个补丁方法,将元素添加到菜单内的ItemClass[]数组中,并能够删除它们。 API方法如下所示: (来自https://stackoverflow.com/a/54679303/479251)