1
如果这是一个基本问题,非常新的流API的如此赦免。我想转换此代码段使用Java 8个流流水线中的中间步骤
Resultset results = new Resultset();
List<Object[]> terms = service.search(term);
Map<Long, TermResult> resultMap = new HashMap<Long, TermResult>();
for(Object[] term : terms) {
Long id = (Long)term[0];
String termStr = (String)term[1];
TermResult termResult = new TermResult(id, termStr);
resultMap.put(id, termResult);
results.addResult(termResult);
}
terms
是在Object[0]
ID和长期目标阵列以及Object[1]
。以上代码清单主要执行以下操作 -
- 转换
terms
列表resultMap
与关键id
和值TermResult
对象 - 添加
TermResult
成一组
results
我是能够转换#1使用流 -
Map<Long, TermResult> resultMap =
terms.stream().collect(Collectors.toMap(p -> (Long)p[0], p -> new TermResult((Long)p[0], (String)p[1])));
但我怎么会偷偷在#2在上述管道?
这是我想出了利用peek
-
Map<Long, TermResult> resultMap =
terms.stream().map(p -> new TermResult((Long)p[0], (String)p[1]))
.peek(p -> results.addResult(p))
.collect(Collectors.toMap(p -> p.getId(), p -> p));
- 这是这样做的正确方法?
- 也可以这样做并行吗?我希望
results
与terms
列表的顺序相同(按术语排序)。我在上面的代码片段中尝试使用parallelStream
。但订单不保存在results
。
谢谢您的输入!
另请参见[“在Java流是真的只用于调试吗?”](http://stackoverflow.com/q/33635717/2711488) – Holger