亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在這里使用 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 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號