将Entry <String,List <String >>转换为Entry <String,String>

时间:2019-12-07 09:42:42

标签: java http

我试图将标题名称及其第一个值存储为列表中的Entry。我不确定如何实现这一目标。

HttpHeaders headerNames = request.getHeaders();
List<Entry<String, String>> reqHeaders = new ArrayList<>();
for (Entry<String, List<String>> entry : headerNames.entrySet()) {
    reqHeaders.add(entry.getKey(), entry.getValue().get(0));   //This line is incorrect
}

2 个答案:

答案 0 :(得分:1)

Java 9 开始,有一种新的实用程序方法允许创建一个不可变条目,该条目为Map#entry(Object, Object)

for (Map.Entry<String, List<String>> entry : headerNames.entrySet()) {
     reqHeaders.add(Map.entry(entry.getKey(), entry.getValue().get(0)));  
}

对于 Java 9 之前的版本,您可以使用AbstractMap.SimpleImmutableEntryAbstractMap.SimpleEntry

for (Map.Entry<String, List<String>> entry : headerNames.entrySet()) {
    reqHeaders.add(new SimpleImmutableEntry<>(entry.getKey(), entry.getValue().get(0))); // immutable
    reqHeaders.add(new SimpleEntry<>(entry.getKey(), entry.getValue().get(0))); // mutable version
}

答案 1 :(得分:0)

我尝试了类似的方法,但是@azro的答案更简单。

        HttpHeaders headerNames = request.getHeaders();
        Map<String, String> headersMap = new HashMap<>();
        List<Entry<String, String>> requestHeaders = new ArrayList<>();
        for (Entry<String, List<String>> entry : headerNames.entrySet()) {
            headersMap.put(entry.getKey(), entry.getValue().get(0));
        }
        requestHeaders.addAll(headersMap.entrySet());