Tôi vừa mới tìm thấy bản thân mình muốn có một phiên bản putIfAbsent (...) trong java.util.Map mà bạn có thể cung cấp một số loại phương pháp nhà máy, để khởi tạo một đối tượng nếu nó chưa có. Điều này sẽ đơn giản hóa rất nhiều mã.Tại sao Java không có phương thức putIfAbsent (khóa, nhà cung cấp) trong Bản đồ?
Đây là giao diện chỉnh sửa của tôi:
import java.util.Map;
import java.util.function.Supplier;
/**
* Extension of the Map Interface for a different approach on having putIfAbsent
*
* @author Martin Braun
*/
public interface SupplierMap<K, V> extends Map<K, V> {
public default V putIfAbsent(K key, Supplier<V> supplier) {
V value = this.get(key);
if(value == null) {
this.put(key, value = supplier.get());
}
return value;
}
}
Bây giờ câu hỏi của tôi: Có khác (dễ dàng hơn) cách để làm điều này hoặc đã tôi chỉ bỏ qua một cái gì đó trong API Java?
FWIW, ['Bản đồ # putIfAbsent'] (http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#putIfAbsent-K-V-) được thêm vào với Java8. – fxm
trong Java 1.8 có V putIfAbsent (khóa K, giá trị V) –
Tôi biết, nhưng nó chỉ cho phép cung cấp một đối tượng thay vì một phương pháp nhà cung cấp. –