转换 Java POJO 和嵌套流(Java 8),可能存在空内部流

问题描述 投票:0回答:1

假设我有以下 java POJO

class Outer {
  Config;
  List<Warning> warnings;

}

class Config {
  String configId;
  String configName;
}

class Warning {
  String warningId;
  String warningName;
}


class Transformed {
  String configId
  String configName;
  String warningId;
  String warningName;
}

所需输出

List<Transformed>

在一个理想的世界中,永远存在 Outer 实例,如果

warnings
始终存在,我可以使用 Java 8 流并转换为
List<Transformed
。但在某些输入情况下
List<Warning> warnings
可能为空。有人可能会说,在进行内部流时使用类似
Stream.ofNullable
的东西。这在我的用例中不起作用,因为即使警告字段为空,我仍然希望
Tranformed
实例填充字段
String configId
String configName
。如何使用 Java 8 流和过滤器组合来做到这一点?理想的方式是什么?或者我只是采用简单的老式嵌套循环方式,进行空检查等?

java java-8 functional-programming java-stream
1个回答
0
投票

这个怎么样?即使警告为空,您也始终可以获得 Transformed 列表。

Stream.of(outer).flatMap(out -> {
                if (out.getWarnings() == null)
                    return Stream.of(new Transformed(out.getConfig().getConfigId(),
                            out.getConfig().getConfigName(), null, null));
                else {
                    return out.getWarnings().stream().map(w -> new Transformed(out.getConfig().getConfigId(),
                            out.getConfig().getConfigName(), w.getWarningId(), w.getWarningName()));

                }
            })
            .collect(toList());
© www.soinside.com 2019 - 2024. All rights reserved.