【发布时间】:2015-12-05 00:06:33
【问题描述】:
我有以下代码尝试通过 Java Stream API 以并行方式从列表中填充地图:
class NameId {...}
public class TestStream
{
static public void main(String[] args)
{
List<NameId > niList = new ArrayList<>();
niList.add(new NameId ("Alice", "123456"));
niList.add(new NameId ("Bob", "223456"));
niList.add(new NameId ("Carl", "323456"));
Stream<NameId> niStream = niList.parallelStream();
Map<String, String> niMap = niStream.collect(Collectors.toMap(NameId::getName, NameId::getId));
}
}
我如何知道地图是否使用多个线程(即并行)填充?我是否需要调用 Collectors.toConcurrentMap 而不是 Collectors.toMap?这是并行化地图人口的合理方法吗?我怎么知道支持新 niMap 的具体地图是什么(例如它是 HashMap)?
【问题讨论】:
-
n 是您的处理器拥有的核心数,将创建 n-1 个线程来对您的并行流进行操作。您的列表中有 3 行,因此您很可能会降低性能。
-
流框架故意向您隐藏实现(并行与否)。如果一切都做对了,就没有办法分辨了。
标签: java parallel-processing java-stream