2012-09-06 19 views
8

Tôi đã gặp phải một vấn đề mà tôi chưa từng phải giải quyết trước đây. Tôi đang viết một bản vá cho một cơ sở dữ liệu trong java về cơ bản là chuyển đổi dữ liệu được lưu trữ trong các hàng nhất định. Để làm được điều này, tôi có một bảng chuyển đổi cho tôi biết những giá trị nào trở thành cái gì.Populating một hashmap với các giá trị được xác định trước (java)

Ví dụ, nếu tôi đọc bằng "RC", "AC", "GH" -> Cập nhật giá trị thành "T1". (Đây chỉ là những ví dụ ngẫu nhiên, về cơ bản nó chuyển đổi một chuỗi thành chuỗi khác.)

Tôi cần một cách tốt để lưu trữ các chuyển đổi này. Tôi đã suy nghĩ một hashmap: KEY, GIÁ TRỊ: (RC, T1) (AC, T1) (GH, T1) và cứ tiếp tục như vậy.

Bây giờ, có hàng chục và hàng chục trong số này. Một cách sạch sẽ tốt của populating hashmap này khi bản vá khởi tạo là gì?

Trả lời

18

tôi sẽ làm khởi động trong khi thiết lập HashMap

Ví dụ

private static final Map<String, String> m = new HashMap<String, String>() {{ 
    put("RC", "T1"); 
    put("AC", "T1"); 
}}; 

Sau đó, bạn wuld đảm bảo rằng tất cả mọi thứ được thiết lập với nhau trong mã của bạn.

Tôi nghĩ @Nambari làm cho một điểm tốt mặc dù có lẽ có giá trị như một danh sách chứ không chỉ là một chuỗi. Điều này sau đó trao đổi các khóa và giá trị của bạn mặc dù.

ví dụ

private static final Map<String, List<String>> m = new HashMap<String, List<String>>() {{ 
    put("T1", Arrays.asList("RC", "AC"); 
}}; 
+0

Cảm ơn! Đó là loại suy nghĩ của tôi (ví dụ đầu tiên của bạn). Tôi đã hy vọng có thể có một cách thực sự gọn gàng để làm điều đó nhưng tôi đoán tôi sẽ phải nhận được xuống và bẩn. Đánh giá cao RNJ để xác nhận. – user1652875

+0

@ user1652875 Tôi nghĩ rằng nó hơi tidier có initialisation trong cùng một vị trí như tuyên bố. Sau đó, bạn biết chắc chắn bản đồ có chứa một số dữ liệu. – RNJ

0

Có thể là cách khác, liệt kê RC,AC,GH làm giá trị và T1 làm khóa cho hashmap, theo cách này bạn có thể giảm số lượng mục nhập trong bản đồ.

+0

Nhưng, phức tạp của một tra cứu trong cơ cấu như vậy sẽ không có bất kỳ tốt - làm thế nào bạn sẽ tìm kiếm bản đồ như vậy rồi, nói khi nhìn lên cho một sự thay thế cho "RC"? –

+0

Tôi đồng ý, đây là cách tiếp cận đơn giản nếu bạn có ít khóa hơn (như T1, T2, v.v.). Nếu ít phím hơn bạn có thể nhận được entrySet() và chơi với nó. Nếu số lượng khóa cũng cao, thời gian tra cứu sẽ cao. Một lần nữa, nó là sự cân bằng, sự đơn giản ở một nơi tạo ra sự phức tạp ở đầu bên kia. – kosa

0

Bạn có thể sử dụng PropertiesConfiguration từ commons apache.

giá trị có thể chứa dấu tách giá trị và sau đó sẽ được hiểu là danh sách mã thông báo. Dấu phân cách giá trị mặc định là dấu phẩy ','. Vì vậy, các tài sản định nghĩa sau

key = This property, has multiple, values 
Các vấn đề liên quan