为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2022-10-20 15:10:25
今天我看到了下面的代码片段,它使用 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");}
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

我几乎找不到任何理由去做这些。提供的代码似乎等同于:


@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 = "";

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

        String responseBody = toJsonString(userJsonMapper.jsonMapFrom(user))

        response.setStatus(SC_OK);

    }


    setResponseHeaders(response, responseBody.length());

    return responseBody;

}


private void setResponseHeaders(HttpServletResponse response, int responseBodySize) {

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

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

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

}

但是上面的内容(在我看来)更容易阅读、理解和维护。除非 lambda 在其他地方得到广泛使用,否则我看不出它存在的理由。老实说,即使在其他地方使用它也可能是矫枉过正。


查看完整回答
反对 回复 2022-10-20
  • 1 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号