dee*_*pan -1 java filter collect java-stream
我正在尝试将此 for 循环和 if 条件转换为 Java 流、过滤和收集
final List<Optional<String>> students = listofstudents.get();
final List<String> finalist = new ArrayList<>(students.size());
for(int i=0; i<students.size(); i++) {
if(students.get(i).isPresent()) {
finalist.add(students.get(i).get());
}
else {
finalist.add(null);
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
List<String>result = null;
students.stream()
.filter(e -> e.isPresent())
.map(e->result.add(e))
.orElse(result.add(null)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
然而,这是完全错误的。我无法让它按预期工作
有人可以告诉我应该如何使用流、过滤器、收集来做到这一点吗?
映射时可以使用三元条件运算符:
List<String> result = students.stream()
.map(op -> op.isPresent()? op.get() : null)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
或者正如 @Mark Rotteveel 正确评论的那样:
students.stream().map(op -> op.orElse(null)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)