1. ホーム
  2. java

[解決済み] Java 8: 並列FORループ

2023-08-23 14:34:23

質問

Java 8は並列計算に関する多くのユーティリティを提供すると聞いています。したがって、私は与えられたforループを並列化する最も簡単な方法は何でしょうか?

public static void main(String[] args)
{
    Set<Server> servers = getServers();
    Map<String, String> serverData = new ConcurrentHashMap<>();

    for (Server server : servers)
    {
        String serverId = server.getIdentifier(); 
        String data = server.fetchData();

        serverData.put(serverId, data);
    }
}

どのように解決するのですか?

以下の記事をお読みください。 ストリーム を読んでみてください。

特に、並列処理に関する部分に注意してください。

明示的なforループによる要素の処理は、本質的にシリアルです。ストリームは、計算を個々の要素に対する命令的な操作としてではなく、集約的な操作のパイプラインとして捉え直すことで、並列実行を容易にします。すべてのストリーム操作は、シリアルまたはパラレルで実行できます。

要約すると、並列のfor-loopは存在せず、それらは本質的に直列です。しかし、ストリームはその仕事をすることができます。次のコードを見てください。

    Set<Server> servers = getServers();
    Map<String, String> serverData = new ConcurrentHashMap<>();

    servers.parallelStream().forEach((server) -> {
        serverData.put(server.getIdentifier(), server.fetchData());
    });