私は、JavaストリームAPIを介して行くことによって並列に一覧から地図を取り込もうとし、次のコードを持っている:マップが複数のスレッドを使用して移入された場合Java Streamの収集(Collectors.toMap)が並列化されているかどうかを確認するにはどうすればよいですか?
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.toMapの代わりにCollectors.toConcurrentMapを呼び出す必要がありますか?これは地図の人口を並列化するための合理的な方法ですか?具体的なマップが新しいniMapを裏付けしているかどうかを知るにはどうすればよいですか(たとえばHashMapですか)? Javadocから
nはあなたのプロセッサが持つコアの数である:
注標準のストリームAPIを強化し、私のStreamExライブラリーは、同時、順次1のための並列ストリームと非同時コレクションのコレクションを使用しています
toMap()
メソッドを追加していること並列ストリームで動作するようにn-1スレッドが作成されます。あなたのリストには3つの行がありますので、パフォーマンスが低下する可能性が最も高くなります。 –ストリームフレームワークは意図的に実装を非表示(並列または非表示)します。すべてが正しく行われていれば、教える方法はありません。 –