我正在学习java 8的一些技巧。我创建了一个简单的列表:
private void createData() {
bottles.add(new Whiskey("Jack Daniels", "PL"));
bottles.add(new Whiskey("Balentains", "PL"));
bottles.add(new Whiskey("Balentains", "EN"));
bottles.add(new Whiskey("Balentains", "EN"));
bottles.add(new Whiskey("Balentains", "GR"));
bottles.add(new Whiskey("Balentains", "PL"));
bottles.add(new Whiskey("Balentains", "GR"));
}
现在我想从这个列表中得到一些东西。如果用户提供参数
origin
,我要按筛选此列表
origins
,但当他给错了
起源
那么他应该得到一个空名单,当他不给的时候
起源
然后他应该得到整个列表。
我有一个过滤列表中项目的方法:
private Optional> getWhiskeyFromCountry(String origin) {
final List whiskies = bottles.stream()
.filter(b -> b.getOrigin().equals(origin))
.collect(Collectors.toList());
return whiskies.isEmpty() ? Optional.empty() : Optional.of(whiskies);
}
以及获取参数(或不获取参数)和结果响应的主要方法:
private void getAll(RoutingContext routingContext) {
Optional origin = Optional.ofNullable(routingContext.request().params().get("filter"));
List result = getWhiskeyFromCountry(origin.orElse("")).orElse(Collections.EMPTY_LIST);
routingContext.response()
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(origin.isPresent() ? result : bottles));
}
问题是,我仍然使用if statemant在最后一行,我不想这样做。我想把这段代码改成清晰和实用的。我试着用选项来做一些魔术,但最后我得到了这个,我认为它可以做得更好,更简单。你能帮我吗?或者这个代码是好的,我不需要改变什么?这个问题更多的是关于干净的代码。