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

Java 在这里使用lambda、function和optional有什么好处?,java,lambda,functional-programming,Java,Lambda,Functional Programming,今天我看到了下面的代码片段,它使用Java中的lambdas、optionals和函数来呈现特定的端点响应这个函数、lambda和那个可选函数的使用在这里是否真的需要和合理?有什么好处? @RequestMapping(value = "/api/v1/User", produces = "application/json;charset=UTF-8", method = RequestMethod.GET) public String getBySomeAttribute(@RequestPa

今天我看到了下面的代码片段,它使用Java中的lambdas、optionals和函数来呈现特定的端点响应这个函数、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");
}
@RequestMapping(value=“/api/v1/User”,products=“application/json;charset=UTF-8”,method=RequestMethod.GET)
公共字符串getBySomeAttribute(@RequestParam(value=“someAttribute”,required=true)字符串someAttribute,
HttpServletResponse(响应){
User User=service.getBySomeAttribute(someAttribute);
返回createResponse(用户,响应);
}
私有字符串createResponse(用户用户,HttpServletResponse){
String ResponseBy=可能((用户u)->{
响应。设置状态(SC_OK);
返回到jsonString(userJsonMapper.jsonMapFrom(u));
}).apply(user).orElse(“”);
setResponseHeaders(response,responseBody.length());
返回响应体;
}
私有函数(函数f){
返回(u)->{
字符串s=null;
如果(u!=null&&u.getEnabled()){
s=f。适用(u);
}
返回s!=null?of(s):可选的.empty();
};
}
私有void setResponseHeader(HttpServletResponse,int-ResponseBySize){
setHeader(“内容长度”,valueOf(responseBodySize));
响应。setHeader(“到期”、“1”);
setHeader(“缓存控制”、“无缓存”);
}

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

@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在其他地方得到广泛应用,否则我看不出它存在的理由。老实说,即使它在其他地方使用,也可能是杀伤力过大。

这确实值得怀疑,因为这里真的没有必要延迟执行(这是功能部分)。。。但是这个问题的答案只能是观点……如果方法
可能只使用一次,这就太复杂了。看起来像是复制/粘贴的代码,而不了解它的功能。这是垃圾。有。