Java 8 は参照透過性を使用することに注意してください 。
この RT を検出するために、次のような多くのコードをテストします。
public class ReferentialTransparency {
public static int triple(int number) {
System.out.println(number);
try {
Thread.sleep(500);
} catch (Exception e) {
}
return number* 3;
}
public static void main(String[] args) {
List<Integer> vals=Arrays.asList(1,2,3,4,3);
System.out.println(vals.parallelStream()
.mapToInt(ReferentialTransparency::triple)
.sum());
}
}
コンソール :
3
4
2
1
3
39
2回出現する要素があっても、Java 8はトリプルメソッドを実行することに注意してください3
.
Istvan の解釈によると、私の質問は次のとおりです。
トリプルが参照透過的である場合、コンパイラはトリプル(3)への繰り返し呼び出しを最適化しないのはなぜですか?