首页 > 解决方案 > 是否可以仅使用 Java 流从集合中获取特定数据?

问题描述

我有以下代码:

 @Override
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
        HttpHeaders httpHeaders = Collections.list(httpServletRequest.getHeaderNames())
          .stream()
          .collect(Collectors.toMap(
            Function.identity(),
            h -> Collections.list(httpServletRequest.getHeaders(h)),
            (oldValue, newValue) -> newValue,
            HttpHeaders::new
          ));
        System.out.println(httpHeaders);
          chain.doFilter(request, response);
      }

它工作得很好,但我只需要获取一些特定的数据,比如接受编码和接受语言。有可能以某种方式做到这一点吗?

标签: javajava-stream

解决方案


一种可能的解决方案

List<String> headerNames = Arrays.asList("Accept-Encoding", "Content-Type");
Map<String, String> headers = headerNames.stream()
     .collect(Collectors.toMap(Function.identity(), header -> httpServletRequest.getHeader(header)));

或者,如果您想获得 HttpHeaders 作为结果

List<String> headers = Arrays.asList("Accept-Encoding", "Content-Type");
HttpHeaders httpHeaders = new HttpHeaders();
headers.forEach(header -> {
    request.getHeaders(header)
             .asIterator()
             .forEachRemaining(value -> httpHeaders.add(header, value));
});

推荐阅读