web-dev-qa-db-ja.com

Java 8 | HashMapの並列ストリーム

In Java 8彼らがマルチコアプロセッサを利用する並列ストリームを追加したことを私は知っています、そしてあなたがそれを次のようなもので使うことができることを私は知っています:

List<String> list = new ArrayList<String>();
list.parallelStream().forEach(str -> System.out.println(str));

しかし、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));

誰かがこのようなことをする方法を知っていますか?ありがとう

7
John S.

Mapを直接ストリーミングすることはできませんが、 entrySet()メソッド で指定されたエントリセットをストリーミングすることはできます。エントリオブジェクトからキーと値を抽出します。

map.entrySet()
   .parallelStream()
   .forEach(entry -> System.out.println(entry.getKey() + ":" + entry.getValue()));
24
rgettman

Map.entrySet()を呼び出すことにより、ハッシュマップから「エントリセット」を取得できます。返されたエントリセットに対してparallelStream()を呼び出すことができます。

返されるオブジェクトはMap.Entryのセットであることに注意してください。 getKey()とgetValue()をそれぞれ呼び出すことにより、エントリセットアイテムからキーと値を取得できます。次のように:

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("a", 1);
map.put("b", 2);
map.entrySet().parallelStream().forEach((e) -> System.out.println(e.getKey() + ":" + e.getValue()));
1
AJ Jwair