猿问

在这里使用 lambda、function 和 optional 有什么好处?

今天我看到了下面的代码片段,它使用 Java 中的 lambda、可选和函数来呈现特定的端点响应。这个函数、lambda 和那个可选函数的使用在这里真的需要和合理吗?有什么好处?


@RequestMapping(value = "/api/v1/User", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)

public String getBySomeAttribute(@RequestParam(value = "someAttribute", required = true) String someAttribute,

                                 HttpServletResponse response) {

    User user = service.getBySomeAttribute(someAttribute);

    return createResponse(user, response);

}


private String createResponse(User user, HttpServletResponse response) {

    String responseBody = maybe((User u) -> {

        response.setStatus(SC_OK);

        return toJsonString(userJsonMapper.jsonMapFrom(u));

    }).apply(user).orElse("");


    setResponseHeaders(response, responseBody.length());

    return responseBody;

}


private Function<User, Optional<String>> maybe(Function<User, String> f) {

    return (u) -> {

        String s = null;

        if (u != null && u.getEnabled()) {

            s = f.apply(u);

        }

        return s != null ? of(s) : Optional.empty();

    };

}


private void setResponseHeaders(HttpServletResponse response, int responseBodySize) {

    response.setHeader("Content-Length", valueOf(responseBodySize));

    response.setHeader("Expires", "1");

    response.setHeader("Cache-Control", "no-cache");

}


心有法竹
浏览 137回答 1
1回答

鸿蒙传说

我几乎找不到任何理由去做这些。提供的代码似乎等同于:@RequestMapping(value = "/api/v1/User", produces = "application/json;charset=UTF-8", method = RequestMethod.GET)public String getBySomeAttribute(@RequestParam(value = "someAttribute", required = true) String someAttribute,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HttpServletResponse response) {&nbsp; &nbsp; User user = service.getBySomeAttribute(someAttribute);&nbsp; &nbsp; return createResponse(user, response);}private String createResponse(User user, HttpServletResponse response) {&nbsp; &nbsp; String responseBody = "";&nbsp; &nbsp; if(user != null && user.getEnabled()) {&nbsp; &nbsp; &nbsp; &nbsp; String responseBody = toJsonString(userJsonMapper.jsonMapFrom(user))&nbsp; &nbsp; &nbsp; &nbsp; response.setStatus(SC_OK);&nbsp; &nbsp; }&nbsp; &nbsp; setResponseHeaders(response, responseBody.length());&nbsp; &nbsp; return responseBody;}private void setResponseHeaders(HttpServletResponse response, int responseBodySize) {&nbsp; &nbsp; response.setHeader("Content-Length", valueOf(responseBodySize));&nbsp; &nbsp; response.setHeader("Expires", "1");&nbsp; &nbsp; response.setHeader("Cache-Control", "no-cache");}但是上面的内容(在我看来)更容易阅读、理解和维护。除非 lambda 在其他地方得到广泛使用,否则我看不出它存在的理由。老实说,即使在其他地方使用它也可能是矫枉过正。
随时随地看视频慕课网APP

相关分类

Java
我要回答