如果这是一个基本问题,那么请原谅我的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
是一个对象数组的列表,其id为Object[0]
,有效期为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
。感谢您的投入!
答案 0 :(得分:3)
不,它不能并行完成;当然D = np.vstack((A,B[np.newaxis,:,:]))
print(D.shape)
不是线程安全的,即使在保留秩序时也不是。 (此外 - 在您实际测量操作所需的时间之前添加并行性几乎总是一个坏主意。如果您只是将它打到各处,并行性更有可能损害性能而不是帮助。 )
所有这一切都说,溪流实际上并不打算一次做多件事。您只是创建地图,然后遍历其(8, 6, 2)
,或者根据{{1实际上是。您可以按照您描述的方式进行操作,但不应该。