質問: new ArrayList<>(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); //実際にリストのstream処理で上記のFunctionを用いて変換する list.stream().map(convertToArray()).forEach(System.out::println); } ``` 結果 ``` [0, taro, 5] [1, jiro, 10] [2, saburo, 15] [3, siro, 20] ``` 期待通りの動きにはなるのですが、ただ推奨されない理由が気になってしまい・・。 ご教示よろしくお願いします。
回答: Streamは**並列**で使われることも想定されています。 つまり、Listに収められている要素に対して順番に処理を行うのではなく、 適宜切り分けて同時進行するという状態です。 その場合、このコードの場合ではListの真ん中あたりに位置していたはずの要素に2番などの早い番号が付く可能性があります。 しかし、Streamの仕様として順次処理と並列処理で結果が変わるべきではありません。 そのため、Streamに使われることが想定されたラムダ式では、状態を持つべきではないのだと思われます。