【问题标题】:Extract all String values from a list of map从地图列表中提取所有字符串值
【发布时间】:2021-07-31 11:59:47
【问题描述】:

我收到以下格式的休息回复。

{
    "query_result": {
        "status": "SUCCESS",
        "message": "Results Found",
        "results": [
            {
                "key": "123"
            },
            {
                "key": "465"
            }
        ]
    }
}

从这个响应中,我想从键中创建一个字符串列表。 因此希望得到如下列表结果:

["123", "456"]

尝试按如下方式生成输出,但卡在以下代码块中的映射步骤。

public Optional<List<String>> get(HttpEntity<Request> request){
    ResponseEntity<Response> response = getResponse(request); // this response holds above json data 

    return Optional.ofNullable(response)
            .map(ResponseEntity::getBody)
            .map(Response::getQueryResult)
            .map(QueryResult::getResults)
            .filter(CollectionUtils::isNotEmpty)
            .map(results -> results.) // Stuck here. results here is the list of results shown in above json. 
}

我无法从这里提取所有键的值。 我最终不得不指出索引如下,这是行不通的,因为我想要所有的键。

.map(results -> results.get(0))

尝试考虑使用迭代器,但最终只会捕获第一个键。

.filter(CollectionUtils::isNotEmpty)
.map(List::iterator)
.map(Iterator::next)
.map(result -> result.getKey())

我能在这方面寻求帮助吗?谢谢。

【问题讨论】:

    标签: java java-8 java-stream


    【解决方案1】:
    .map(QueryResult::getResults)
    .filter(CollectionUtils::isNotEmpty)
    .map(results -> results.stream().map(Key::getKey).collect(Collectors.toList()));
    

    假设每个键对象都正确映射到名为Key 的类,如下所示:

    class Key {
        String key;
    
        String getKey() {
            return key;
        }
    }
    

    您希望在您的Optional 链上将其内部Keys 列表转换为Strings 列表。所以最后一步只是处理那部分。

    注意
    1. 您的方法返回一个可选列表。一般来说,如果你返回一个空列表而不是null,这在语义上会更好,但这取决于实现。

    2. 如果越来越难以理解 lambda,请将其逻辑转移到方法中。比如上面的链可以变成:

    List<String> collectKeys(List<Key> keys) {
        return keys.stream().map(Key::getKey).collect(Collectors.toList())
    }
    
    // and then:
    .map(QueryResult::getResults)
    .filter(CollectionUtils::isNotEmpty)
    .map(this::collectKeys);
    

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 2022-01-27
      • 2016-06-24
      • 1970-01-01
      相关资源
      最近更新 更多