选择目标字段值的代码(' targetField'):
result = someList.stream()
.filter(i -> i.geFilterField() == someValue)
.map(i -> i.getTargetField())
.findFirst()
.orElse(null);
但是' targetFiled'是可空的。
如果目标字段值为空,我如何从替代字段中获取价值(某些' alterField')?
答案 0 :(得分:2)
使用Optional#ofNullable
可以选择
result = someList.stream()
.filter(i -> i.geFilterField() == someValue)
.map(i -> Optional.ofNullable(i.getTargetField())
.orElse(i.getAlterField()))
.findFirst()
.orElse(null);
答案 1 :(得分:1)
如果您需要从对象中提取替代值,则可以按如下方式完成:
someList.stream()
.filter(i -> i.geFilterField() == someValue)
.map(i -> i.getTargetField() != null ? i.getTargetField() : i.getAlterField())
.findFirst()
.orElse(null);
答案 2 :(得分:0)
由于您只查找第一个项目,过滤“原始”项目,然后在只有一个对象时选择该字段,如下所示:
tmp = someList.stream()
.filter(i -> i.geFilterField() == someValue && (i.getTargetField() != null || i.getAlterField() != null))
.findFirst()
.orElse(null);
// At this point tmp is either null if nothing is found, or
// it is an object with one or both target fields set to non-null values
result = null;
if (tmp != null) {
result = tmp.getTargetField() != null ? tmp.getTargetField() : tmp.getAlterField();
}