首页 > 解决方案 > 模型中的Java lambda流合并参数

问题描述

我找不到答案。我尝试将多个对象合并为一个。示例模型

public class Model {
    private List<Map<String, Object>> param1;
    private List<String> param2;
}

在我的代码中,我将另一个数据转换为模型。

List<Model> models = models2.stream()
    .map(Optional::get)
    .map(model2 -> convert(model2))
    .collect(Collectors.toList()); 

我尝试将转换后的模型列表聚合为一个模型。喜欢:

Model model = models2.stream() ...etc

但我不知道怎么做。

标签: javalambdacollectionsjava-8java-stream

解决方案


merge最简单的方法是向您的Model类添加一个方法:

public class Model {
    private List<HashMap<String, Object>> param1;
    private List<String> param2;

    public Model merge (Model other) {
        this.param1.addAll(other.param1);
        this.param2.addAll(other.param2);

        return this;
    }
}

然后reduce你的流:

Model allInOne = models2.stream()
    .map(Optional::get)
    .map(model2 -> convert(model2))
    .reduce(Model::merge)
    .get();

merge方法也可以是一个static Model merge (Model first, Model second)或外部化的BinaryOperator<Model>函数。


推荐阅读