首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学习Java 8-用于地图输入

学习Java 8-用于地图输入
EN

Stack Overflow用户
提问于 2019-12-09 08:00:07
回答 3查看 491关注 0票数 2

是否有一种使用Java 8实现以下代码的更简单的方法?

代码语言:javascript
复制
    Enumeration headerNames = request.getHeaderNames();
    List<Entry<String, String>> headers = new ArrayList<>();
    while (headerNames.hasMoreElements()) {
        String headerName = (String) headerNames.nextElement();
        headers
            .add(Map.entry(headerName, request.getHeader(headerName)));
    }

编辑:

是的,请求是HttpServletRequest

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-09 08:07:42

你可以这样做

代码语言:javascript
复制
Collections.list(request.getHeaderNames()).stream()
            .map(e->new AbstractMap.SimpleEntry<>(e,request.getHeader(e)))
            .collect(Collectors.toList());
票数 5
EN

Stack Overflow用户

发布于 2019-12-09 08:16:30

一个简单的答案不涉及手动创建Entry对象:

代码语言:javascript
复制
Collections.list(request.getHeaderNames())
    .stream()
    .collect(
        Collectors.toMap(
            Function.identity(), 
            header -> Collections.list(httpRequest.getHeaders(header))
    ));

请参阅Hadi J's answer中的替代方法。

票数 2
EN

Stack Overflow用户

发布于 2019-12-09 10:01:36

由于public Enumeration<String> getHeaderNames();仍然是JavaEE8API的一部分,所以我会坚持使用它。您可以使用Enumeration<String>而不是无类型变体来删除某些类型的转换。

我看到的所有使用Stream API的Java8变体都有一个“缺点”,就是首先从枚举中创建一个列表。看看SourceCode of Collection.list。它构建了一个新的ArrayList

此外,您还可以问,是否已经发布的(和正确的)答案可以被认为是简单的。但和往常一样,我认为这是品味的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59244687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档