Tyu*_*pan 16 java java-8 java-stream
我要做的是过滤列表,然后映射它并使用orElseif null然后将其收集回列表.现在我可以通过这种方式实现它:
return users.stream()
.filter(user -> id.equals(user.getId()))
.map(
user -> {
if(user.getData() != null) {
return user.getData();
}
return Collections.emptyMap();
}
)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但问题是:我怎样才能使这个结构更好,为什么我不能orElse在这种情况下使用?
Era*_*ran 14
使用三元条件运算符可能更具可读性:
return users.stream()
.filter(user -> id.equals(user.getId()))
.map(
user -> (user.getData() != null)
? user.getData()
: emptyMap()
)
.collect(Collectors.toList())
;
Run Code Online (Sandbox Code Playgroud)
为了使用orElse你必须创建一个Optional包装user.getData().我不确定这是个好主意.
如果您坚持使用orElse(或者更好,orElseGet以避免emptyMap()在不需要时进行评估),它可能如下所示:
return users.stream()
.filter(user -> id.equals(user.getId()))
.map(
user -> Optional.ofNullable(
user.getData()
).orElseGet(
() -> emptyMap()
)
)
.collect(Collectors.toList())
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2695 次 |
| 最近记录: |