Java 8 | HashMap的并行流

Joh*_* S. 6 java parallel-processing foreach lambda hashmap

在java 8中,我知道他们添加了利用多核处理器的并行流,我知道你可以使用这样的东西:

List<String> list = new ArrayList<String>();
list.parallelStream().forEach(str -> System.out.println(str));
Run Code Online (Sandbox Code Playgroud)

但是我如何通过HashMap实现这样的目标呢?

Map<String, Integer> map = new HashMap<String, Integer>();
// won't work, because the Map class doesn't have the .parallelStream()
map.parallelStream().forEach((str, num) -> System.out.println(str + ":" + num));
Run Code Online (Sandbox Code Playgroud)

有谁知道怎么做这样的事情?谢谢

rge*_*man 23

您不能Map直接流式传输,但可以使用entrySet()方法流式传输其入口集.从条目对象中提取键和值.

map.entrySet()
   .parallelStream()
   .forEach(entry -> System.out.println(entry.getKey() + ":" + entry.getValue()));
Run Code Online (Sandbox Code Playgroud)

  • @约翰小号:也许你正困惑`和`Map.get` Map.Entry.getValue`.这里调用`getValue`不等同于'Map`查找.虽然地图的实现依赖,一个条目通常代表某种具有廉价`getKey`和`getValue`方法,即在java.util.HashMap`的`情况下解决映射的,我们在谈论从条目读出一个场实例,而不是哈希查找. (3认同)
  • 与什么相比?某些代码必须从条目中提取值(和键)。 (2认同)