You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java Stream能否从集合中仅提取指定的请求头字段数据?

实现方案

完全可以通过Java Stream实现,只需要在原有Stream流中增加过滤逻辑,仅保留你指定的请求头即可,以下是修改后的完整代码:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    // 定义需要提取的请求头集合,后续新增目标头直接往该集合添加即可
    Set<String> targetHeaders = Set.of("accept-encoding", "accept-language");
    HttpHeaders httpHeaders = Collections.list(httpServletRequest.getHeaderNames())
            .stream()
            // 新增过滤逻辑:忽略大小写匹配目标请求头,兼容不同客户端的大小写写法差异
            .filter(headerName -> targetHeaders.contains(headerName.toLowerCase()))
            .collect(Collectors.toMap(
                    Function.identity(),
                    h -> Collections.list(httpServletRequest.getHeaders(h)),
                    (oldValue, newValue) -> newValue,
                    HttpHeaders::new
            ));
    System.out.println(httpHeaders);
    chain.doFilter(request, response);
}

如果不需要处理请求头大小写差异,直接把过滤逻辑改成.filter(targetHeaders::contains)即可。
如果你的项目使用Java 8,不支持Set.of()写法,可以把targetHeaders的定义替换为:

Set<String> targetHeaders = new HashSet<>(Arrays.asList("accept-encoding", "accept-language"));

内容的提问来源于stack exchange,提问作者JRobi17X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:01