hot*_*oup 6 java java-8 java-stream
Java 8 在这里。我需要在两个 POJO 列表中搜索一个字符串,并希望正确使用 Stream/Optional API。
如果名称出现在第一个列表 (" lunches") 中,那么我想返回一个包含它的可选项。否则,如果名称出现在第二个列表 (" dinners") 中,那么我想返回一个包含它的可选项。否则,Optional.empty()如果该名称不存在于任一列表中,我想返回。迄今为止我最好的尝试:
public class Restaurant {
private String id;
private String name;
private List<Food> lunches;
private List<Food> dinners;
public Optional<Food> findFoodByName(String name) {
return Optional.of(lunches.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst())
.orElse(dinners.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst());
// .orElse(null); TODO: how to return empty optional if neither in 'lunches' nor 'dinners'?
}
}
Run Code Online (Sandbox Code Playgroud)
谁能帮我在这里越过终点线?
结合使用列表Stream.of并检查元素或返回Optional.empty()
Stream.of(lunches, dinners)
.flatMap(List::stream)
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();
Run Code Online (Sandbox Code Playgroud)
根据@Holger 的建议,您还可以使用Stream.concat连接两个流,然后检查元素
Stream.concat(lunches.stream(), dinners.stream())
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
381 次 |
| 最近记录: |