AtomicInteger
đã được đề cập. Mutable Double
s có thể được mô phỏng với AtomicReference<Double>
. Các cảnh báo đã đề cập được áp dụng và đó là kiểu không hợp lệ, nhưng đôi khi bạn có mã như thế này
double sum=0
for (Data data:someListGenerator())
sum+=data.getValue()
và muốn cấu trúc lại nó theo kiểu Java 8 chức năng. Nếu mã tuân theo mô hình này nhưng thêm độ phức tạp đáng kể vào nó, thì chuyển đổi hợp lý nhất có thể là
AtomicReference<Double> sumref=new AtomicReference<>(0d);
someStreamGenerator().forEach(data->
sumref.set(sumref.get().doubleValue()+data.getValue()));
double sum=sumref.get().doubleValue();
Tất nhiên, đây ít nhất là phong cách đáng nghi vấn. Nhưng tôi đã nhiều lần thấy mình ở trong một tình huống với một vòng lặp xoắn trên ResultSet
máy tính và một phần tích lũy ba thông tin khác nhau từ nó. Điều này làm cho nó thực sự khó khăn để chuyển đổi mã thành phong cách chức năng thích hợp. Việc chuyển đổi các bộ phận tích hợp theo mô hình trên đối với tôi dường như là một sự cân bằng hợp lý giữa mã sạch và tái cấu trúc đơn giản hóa quá mức.