使用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
相关产品推荐
相关产品推荐

