2012-03-29 54 views
5

Tôi đang cố gắng chỉ lặp lại các giá trị "n" đầu tiên trong Bản đồ của tôi, có phương pháp nào khả dụng không hoặc tôi chỉ cần kiểm soát nó bằng biến đếm.Cách lấy 10 cặp khóa giá trị đầu tiên trong HashMap

Dưới đây là ví dụ, tôi đã sắp xếp một nhóm tên thuộc cùng một thành phố. Bây giờ tôi chỉ muốn 10 thành phố đầu tiên và tên người trong đó.

for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
    List<String> list = entry.getValue(); 
    // Display list of people in City 
} 

Có triển khai Bản đồ có thể chứa số lượng khóa, giá trị cố định không? Vui lòng nhận một số hướng dẫn.

Cảm ơn,

-Vijay Selvaraj

+2

Bạn có muốn ngăn chặn thêm hơn 10 mục nhập hoặc bạn muốn 10 mục nhập nào hoặc bạn muốn thêm 10 mục nhập đầu tiên? Thêm chi tiết. –

+0

Mục tiêu của tôi là có 10 mục nhập. Bây giờ tôi đang làm cho nó đầy đủ và sau đó tham gia một tập hợp con của toàn bộ. Nhưng tôi có thể dừng lại khi tôi đạt đến 10 mục. –

Trả lời

9

Làm thế nào để lấy 10 cặp giá trị quan trọng đầu tiên trong HashMap

HashMapis unordered. Điều này làm cho câu hỏi bị đặt ra (trừ khi "đầu tiên" bạn có nghĩa là "tùy ý").

Nếu bạn muốn có thứ tự khóa nhất quán, bạn cần thay đổi loại bản đồ thành SortedMap, chẳng hạn như TreeMap.

Hoặc, nếu đó là các yếu tố lâu đời nhất mà bạn đang theo dõi (tức là những yếu tố bạn đã chèn trước), thì LinkedHashMap là câu trả lời.

Để thực sự nhận được các thành phần n đầu tiên, một vòng lặp với bộ đếm là một cách khá hợp lý để thực hiện.

2
List<List<string>> list = new ArrayList<List<String>>(); 
for (Map.Entry<String, List<String>> entry : map.entrySet()) { 
    if (list.size() > 9) break; 
    list.add(entry.getValue()); 
} 
+1

OP tuyên bố rằng anh ta biết cách làm điều này với biến số lượt truy cập –

3

Tôi cố gắng để lặp chỉ "n" giá trị đầu tiên trong Bản đồ của tôi, là có bất kỳ phương pháp có sẵn hoặc i cần phải kiểm soát nó chỉ với một biến đếm.

Điều gần nhất bạn sẽ tìm thấy chỉ sử dụng các bộ sưu tập API chuẩn (mà vẫn còn hơi kém hơn một biến truy cập IMO) là như sau:

List<Map.Entry<String, List<String>> entryList = 
     new ArrayList<Map.Entry<String, List<String>>(map.entrySet()); 

for (Map.Entry<String, List<String>> entry : entryList.subList(0, 10)) { 
    List<String> list = entry.getValue(); 
    // Display list of people in City 
} 

Các thông số loại dài có thể tránh được hoặc bằng cách sử dụng kim cương lạ mắt từ Java 7:

List<Map.Entry<String, List<String>> entryList = new ArrayList<>(map.entrySet()); 

hoặc bằng cách sử dụng lặp qua các phím và .get các giá trị tương ứng.

+0

Chỉ cần nhìn vào cả Hashmap và Set, không có phương thức subList, hãy quan tâm đến chúng ta đến từ đâu? – Churk

+1

@Churk: Nó xuất phát từ 'ArrayList' được xây dựng với nội dung của' map.entrySet() '. – NPE

+0

@aix map.entrySet() trả về một tập hợp, không phải là danh sách mảng – Churk

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