是否有一种使用Java 8实现以下代码的更简单的方法?
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
发布于 2019-12-09 08:07:42
你可以这样做
Collections.list(request.getHeaderNames()).stream()
.map(e->new AbstractMap.SimpleEntry<>(e,request.getHeader(e)))
.collect(Collectors.toList());发布于 2019-12-09 08:16:30
一个简单的答案不涉及手动创建Entry对象:
Collections.list(request.getHeaderNames())
.stream()
.collect(
Collectors.toMap(
Function.identity(),
header -> Collections.list(httpRequest.getHeaders(header))
));请参阅Hadi J's answer中的替代方法。
发布于 2019-12-09 10:01:36
由于public Enumeration<String> getHeaderNames();仍然是JavaEE8API的一部分,所以我会坚持使用它。您可以使用Enumeration<String>而不是无类型变体来删除某些类型的转换。
我看到的所有使用Stream API的Java8变体都有一个“缺点”,就是首先从枚举中创建一个列表。看看SourceCode of Collection.list。它构建了一个新的ArrayList。
此外,您还可以问,是否已经发布的(和正确的)答案可以被认为是简单的。但和往常一样,我认为这是品味的问题。
https://stackoverflow.com/questions/59244687
复制相似问题