【问题标题】:Is it possible to get specific data only from a collection using Java stream?是否可以仅使用 Java 流从集合中获取特定数据?
【发布时间】:2021-10-29 08:10:33
【问题描述】:

我有以下代码:

 @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);
      }

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

【问题讨论】:

  • httpServletRequest.getHeader() 将获取特定标头的值
  • 你也可以同时做两个标题吗?
  • 你想要什么结果,标题名称和值的映射,或者只是一些标题的值?
  • 标题名称和值也适用于指定的。所以基本上我写的代码对标题中的每个数据都是这样做的。但我需要同样的回应,只需要几个。

标签: java java-stream


【解决方案1】:

一个可能的解决方案

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));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-19
    • 2012-05-29
    • 2021-05-31
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2011-06-12
    相关资源
    最近更新 更多