java - 如何为可选流中的列表映射索引 0 处的值

标签 java java-8

我有以下方法工作正常。我正在尝试完成所有事情并获得该可选流中的值
无需进行额外的 if 检查。是否可以在索引 0 处映射并获取 Result 对象?请指教谢谢。

public String getData(HttpEntity<Request> request, String endPoint){
    ResponseEntity<Reponse> response = 
        template.exchange(endPoint, HttpMethod.POST, request, Reponse.class);

    List<Result> results = Optional.ofNullable(response)
        .map(ResponseEntity::getBody)
        .map(Response::getQueryResult)
        .map(QueryResult::getResults)
        // getResults is an ArrayList of Result Objects. Could I get the Result Object at index 0 here? 
        // following that I plan to go .map(Result::getValue) here. 
        .orElse(null);
    if(CollectionUtils.isNotEmpty(results)){
        return results.get(0).getValue();
    }
    return null;
}

最佳答案

return Optional.ofNullable(response)
               .map(ResponseEntity::getBody)
               .map(Response::getQueryResult)
               .map(QueryResult::getResults)
               .filter(CollectionUtils::isNotEmpty)
               .map(list -> list.get(0)) // hate this part :)
               .map(Result::getValue)
               .orElse(null);

如果您喜欢方法引用,并且发现 lambda 很无聊
return Optional.ofNullable(response)
               .map(ResponseEntity::getBody)
               .map(Response::getQueryResult)
               .map(QueryResult::getResults)
               .filter(CollectionUtils::isNotEmpty)
               .map(List::iterator)
               .map(Iterator::next)
               .map(Result::getValue)
               .orElse(null);

我出于教育原因展示了它,即使我喜欢它,我也不提倡它。

关于java - 如何为可选流中的列表映射索引 0 处的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61062249/

相关文章:

java - C与java之间的socket通信

java - 一个布局放在另一个布局之上?

java - 关闭InputStream即使抛出也会释放资源吗?

java - 从 JSONObjects 的 JSONArray 中删除除一个元素之外的所有元素

java - udp 客户端无法从另一个应用程序访问

java - "Building the updating function just like inserting function"是好的还是坏的解决方案?

java - RxJava 中的指数退避

java - Java 中一个对象与另一个对象的弱关联?

java - 如何在 Java 8 中使用 concat 获取不同的对象列表

java - Stream.reduce() 与 Stream.parallel.reduce()