Java 8代码优化——删除if语句

我正在学习 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,但是当他给出错误origin时,他应该得到空列表,当他不给出origin参数时,他应该得到整个列表。


我有一个过滤列表中项目的方法:


 private Optional<List<Whiskey>> getWhiskeyFromCountry(String origin) {

        final List<Whiskey> 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<String> origin = Optional.ofNullable(routingContext.request().params().get("filter"));

        List<Whiskey> 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 语句,但我不想这样做。我想将此代码更改为清晰且实用。我尝试用Options做一些魔法,但最终我得到了这个,我认为它可以做得更好、更简单。你可以帮帮我吗?或者也许这段代码很好,我不需要改变任何东西?这个问题更多的是关于干净的代码。


白板的微信
浏览 122回答 1
1回答

翻阅古今

您可以使此方法getWhiskeyFromCountry接受Optional<String>作为参数private List<Whiskey> getWhiskeyFromCountry(Optional<String> origin)然后如果Optional为空返回空列表或返回基于的列表filter,如果用户输入错误origin仍然会得到空列表return origin.map(o->bottles.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(b -> b.getOrigin().equals(o))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList())).orElse(Collections.EMPTY_LIST);或者在上面的代码中,您可以进行一些小的调整以返回List此方法getWhiskeyFromCountry&nbsp;private List<Whiskey> getWhiskeyFromCountry(String origin) {&nbsp; &nbsp; return bottles.stream()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .filter(b -> b.getOrigin().equals(origin))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .collect(Collectors.toList());&nbsp; }并在 main 方法中使用Optional.mapOptional<String> origin = Optional.ofNullable(routingContext.request().params().get("filter"));List<Whiskey> result = origin.map(o->getWhiskeyFromCountry(o))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.orElse(bottles);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java