2016-11-06 11 views
5

Tôi có đoạn code dưới đây:Arrays.asList cũng cho bản đồ?

Map<String, Map<Double, String>> map = new HashMap<>(); 
Map<Double,String> Amap = new HashMap<>(); 
map.put(getValuesTypes.FUT(), HERE); 

Thay vì tạo ra một bản đồ đầu tiên và đặt nó vào "ĐÂY", tôi đang tìm một chức năng như tôi có thể sử dụng với một ListArrays.asList(...) để tôi có thể chỉ cần nhập tại "Here" ?.asMap({1.0,"A"}, {2.0,"B"})

+0

'{1.0," A "}' là một mảng đối tượng, không phải là bản đồ –

+1

Với Java 9, bạn sẽ có thể sử dụng các phương pháp tạo bộ sưu tập để tạo bản đồ bất biến, xem http://download.java.net/ java/jdk9/docs/api/java/util/Map.html # of-KV- và các biến thể của nó. – Tordanik

Trả lời

4

Bạn có thể khởi tạo HashMap như thế này.

new HashMap<Double, String>() { 
    { 
     put(1.0, "ValA"); 
     put(2.0, "ValB"); 
    } 
}; 
+1

Hãy chắc chắn rằng nó có chi phí ẩn của việc tạo ra bản đồ bổ sung. Nó được gọi là khởi tạo cú đúp đôi. – jakubbialkowski

1

Không có chữ nào để khởi tạo bản đồ theo cách đó. Nhưng bạn có thể sử dụng một lớp ẩn danh tạo tại chỗ:

map.put(getValuesTypes.FUT(), new HashMap<Double, String>() {{ 
    put(1.0, "A"); 
    put(2.0, "B"); 
}}); 

mặc dù không được khuyến nghị. Tôi sẽ đề nghị sử dụng ổi của ImmutableMap:

map.put(getValuesTypes.FUT(), ImmutableMap.<Double, String>of(1.0, "A", 2.0, "B")); 

Nếu một số cặp lớn hơn 5, bạn nên sử dụng họ builder:

map.put(getValuesTypes.FUT(), 
     ImmutableMap.<Double, String>builder().put(1.0, "A")/* 5+ puts */.build()); 
+0

Nếu không cần nhập thêm libs, bạn có thể sử dụng 'java.util.Collections' như vậy' Collections.unmodifiableMap (myHashMapInstance) ' – Jaxon

2

Với Guava

Map<Double, String> map = ImmutableMap.of(1.0, "A", 2.0, "B"); 
0

Bạn chỉ có thể khởi tạo một bản đồ mới bằng cách sử dụng một lớp ẩn danh. ví dụ:

new HashMap<K, V>() {{ put(key, value); put(key, value); }};

1

ổi của ImmutableMap.of(..) có thể giúp theo hướng này:

ImmutableMap.of(1, "a"); 

trong JDK chỉ có Collections.singletonMap(..) là, nhưng điều này cung cấp cho bạn chỉ là một bản đồ với một cặp duy nhất.

Có một discussion trong guava project để chứa Maps.asMap(Object... varArgs), bit đã bị dừng. Vì vậy, ImmutableMap.of (...) là con đường để đi.

Các vấn đề liên quan