2012-02-21 41 views
11

Tôi muốn xem tất cả các mục trong từ điển trong java. để làm rõ những gì tôi muốn làm, đây là mã C#Vòng lặp foreach trong java cho từ điển

Dictionary<string, Label> LableList = new Dictionary<string, Label>(); 
foreach (KeyValuePair<string, Label> z in LabelList); 

Tôi không biết làm thế nào để làm điều này là java, ví dụ tôi đã làm điều này

for(Object z: dic) 

nhưng nó nói nó không phải là iterable . Vui lòng thông báo cho ......

Trả lời

31

Tôi giả sử bạn có một cấu hình từ điển được xây dựng sẵn trong Java là Map<String, Label>. Java không cho phép bạn lặp lại trực tiếp qua một số Map (tức là nó không thực hiện Iterable) vì nó sẽ không rõ ràng về những gì bạn đang thực sự lặp lại.

Đó chỉ là vấn đề chọn lặp qua các khóa, giá trị hoặc mục nhập (cả hai).

ví dụ:

Map<String, Label> map = new HashMap<String, Label>(); 
//... 

for (String key : map.keySet()) { 
} 

for (Label value : map.values()) { 
} 

for (Map.Entry<String, Label> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Label value = entry.getValue(); 
} 

Mã C# của bạn có vẻ giống như lặp qua các mục nhập (ví dụ cuối).

+0

Đây là cách tôi xác định: Từ điển dic = null; Tôi không biết gì về Bản đồ ... Có phải đó là một loại từ điển nào đó không? – Daniel

+3

@Daniel Đọc javadoc sẽ cho bạn biết 'LƯU Ý: Lớp này đã lỗi thời. Triển khai mới nên triển khai giao diện Bản đồ, thay vì mở rộng lớp này.', vì vậy bạn nên sử dụng một trong các lớp bản đồ mới. Bạn có thể muốn một 'HashMap' - cũng thực hiện các chức năng mới mà bạn cần để lặp lại để làm việc – Voo

+1

Thật tuyệt vời, tôi đã từ lâu quên rằng Hashtable đã có một siêu lớp từ điển. –

0

Tốt nhất là sử dụng này:

for (String key : LableList.keys()) { 
    Label value = LableList.get(key); 

    // do what you wish with key and value here 
} 

Trong Java tuy nhiên, một đặt cược tốt hơn là không sử dụng từ điển như bạn làm trong .NET nhưng để sử dụng một trong các lớp con Bản đồ, ví dụ Bản đồ băm. Bạn có thể lặp qua một trong các trường hợp như sau:

for (Entry<String, Label> e : myMap.entrySet()) { 
    // Do what you wish with e.getKey() and e.getValue() 
} 

Bạn cũng nên tránh sử dụng Dictionary trong javadoc chính thức.

+1

Dictionary.keys() trả về một Enumeration không thực thi Iterable và do đó không thể được sử dụng trong vòng lặp foreach. Mã của bạn sẽ không biên dịch. – Philipp

+0

Nói điều đó với mã làm việc của tôi :) –

+0

Vì vậy, trình biên dịch Eclipse của tôi bị hỏng (hiển thị và lỗi), hoặc chúng ta không nói về cùng một thứ. (Không phải là từ điển có vấn đề theo bất kỳ cách nào) – Philipp

3

java.util.Map là equvivalent điển và dưới đây là một ví dụ về cách bạn có thể lặp qua mỗi mục

for(Map.Entry<K, V> e : map.entrySet()) 
{ 
    System.out.println(e.getKey()+": "+e.getValue()); 
} 
0

Tôi đã cố gắng để thêm nội dung của một HashMap (a) vào HashMap khác (b).

tôi thấy nó đơn giản để lặp qua HashMap một cách này:

a.forEach((k, v) -> b.put(k, v)); 

Bạn có thể thao tác ví dụ của tôi để làm những gì mà bạn muốn ở phía bên kia của "->".

Lưu ý rằng đây là biểu thức Lambda và bạn sẽ phải sử dụng Java 1.8 (Java 8) trở lên để thao tác này hoạt động. :-)

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