我正在尝试用akka生成自定义HttpHeader。我有一个头条目的HashMap,我需要将其转换为Iterable。下面是我的代码:
import akka.http.javadsl.model.HttpHeader;
HashMap<String, String> headersMap = new HashMap<>();
headersMap.put("key1","value1");
return (Iterable<HttpHeader>) headersMap;
//HttpRequest.create().withUri("uri").addHeaders(Iterable<HttpHeader> iterable)
public static Iterable<HttpHeader> convertToRecordHttpHeaders(Map<String, String> headersMap){
return headersMap.entrySet().stream()
.map(x -> new HttpHeader(x.getKey(), x.getValue()))
.collect(Collectors.toList());
}
当我想在akka中创建一个HttpRequest时,将map转换为HttpHeader并将其转换为Iterable的有效方法是什么?
解决方案:使用RawHeader将标题添加到请求
request.addHeader(RawHeader.create("key","value"));
2条答案
按热度按时间czfnxgou1#
HashMap
不是Iterable
。它是entrySet()
、keySet()
和values()
,但对于你的Map,它们分别是Iterable<Map.Entry<String, String>>
、Iterable<String>
和Iterable<String>
。这意味着你不能以任何方式将Map转换为Iterable<HttpHeader>
。您可以转换:
这里假设
HttpHeader
有一个接受头文件名和值的构造函数,如果没有,就用创建HttpHeader
的其他函数替换构造函数调用。kninwzqo2#
假设Header类如下所示
那么就使用构造函数引用来代替lambda,或者可以使用lambda表达式提供解析
headersMap.entrySet().stream().map(HttpHeader::new).iterator();
但是我仍然不理解为返回HttpHeader迭代器创建HashMap的用例。
我猜你曾经保持头键唯一的vivaMap,但是你可以使用TreeSet,将保持唯一的对象太多