假设我有以下 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 流和过滤器组合来做到这一点?理想的方式是什么?或者我只是采用简单的老式嵌套循环方式,进行空检查等?
这个怎么样?即使警告为空,您也始终可以获得 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());