Java lambda流合并模型中的参数

标签 java lambda collections java-8 java-stream

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

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

但我不知道如何。

最佳答案

最简单的是添加 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>功能。

关于Java lambda流合并模型中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54551169/

相关文章:

linq - 在 LINQ Lambda 表达式中使用 GroupBy、Count 和 Sum

collections - F#无序集合类型来表示资源和成本

java - 以这种方式使用多个构造函数是否正确?

java - 使用 Java8 lambda 在模拟类上进行参数匹配

java - 如何在搜索 API 中排除源字段?

C#——我们应该检查 lambda 中的传入参数吗?

Java - 如何将类型集合转换为 ArrayList?

java - Collections.sort 不适用于自定义比较器?

java - 用于创建抽象类(而不是接口(interface))代理的 java.lang.reflect.Proxy 的替代品

java - 如何使用 runOnUiThread() 或 onPostExecute() 在线程内更新 UI