2012-02-21 3 views
11

java의 사전에있는 모든 항목을 살펴보고 싶습니다. 내가하고 싶은 것을 명확히하기 위해,이 내가이사전에 대한 Java의 Foreach 루프

for(Object z: dic) 

했다 예를 들어 내가이 작업을 수행하는 방법을 모르는

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

자바 인 C# 코드를,하지만 그것은 반복 가능하지 말한다 . 제발 조언 해주세요 ......

답변

31

나는 자바 내장 사전 구조 인 Map<String, Label>이 있다고 가정하고 있습니다. Java는 Map (즉, Iterable을 구현하지 않음)을 통해 직접 반복하도록 허용하지 않습니다. 실제로 반복하는 내용이 모호 할 수 있습니다.

키, 값 또는 항목 (둘 다)을 반복하는 것이 중요합니다.

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(); 
} 

C# 코드는 항목을 반복하는 것과 같습니다 (마지막 예).

+0

다음과 같이 정의합니다. Dictionary dic = null; 지도에 대해 아무것도 몰라요 ... 사전 같은가요? – Daniel

+3

@Daniel javadoc을 읽으면'주의 :이 클래스는 쓸모가 없다. 새로운 구현은이 클래스를 확장하는 것이 아니라 Map 인터페이스를 구현해야합니다. '그래서 새로운지도 클래스 중 하나를 사용해야합니다. 당신은 아마도'HashMap'을 원할 것입니다. - iterable이 작동하는데 필요한 새로운 함수를 구현합니다. – Voo

+1

놀랍습니다. Hashtable이 사전 슈퍼 클래스를 가지고 있다는 것을 잊어 버렸습니다. –

0

가장 좋은 방법은이를 사용하는 것입니다 :

그러나, 더 나은 내기하면, 예를 들어, .NET뿐만지도 서브 클래스 중 하나를 사용하는 것 같은 사전을 사용하지 않는 것입니다 자바에서
for (String key : LableList.keys()) { 
    Label value = LableList.get(key); 

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

HashMap. 다음과 같이 이들 중 하나를 반복 할 수 있습니다.

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

또한 공식 javadoc에서 사전 사용을 권장하지 않습니다.

+1

Dictionary.keys()는 Iterable을 구현하지 않고 foreach 루프에서 사용할 수없는 Enumeration을 반환합니다. 코드가 컴파일되지 않습니다. – Philipp

+0

이것을 내 작업 코드로 말하십시오 :) –

+0

제 Eclipse 컴파일러가 손상되었거나 (표시 및 오류), 우리는 똑같은 것에 대해 이야기하지 않습니다. (그 사전은 어떤 식 으로든 중요하지 않습니다.) – Philipp

3

java.util.Map은 사전 equvivalent이고 아래는 내가 다른 HashMap의 (B)에 하나의 HashMap (가)의 내용을 추가하려고했다

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

각 항목을 반복 할 수있는 방법에 대한 예입니다. "->"

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

당신은 당신의 반대편에 가장 원하는 일을 내 예를 조작 할 수 있습니다 :

나는 간단의 HashMap이 방법을 반복하는 발견했다.

람다 표현식이며이 기능을 사용하려면 Java 1.8 (Java 8) 이상을 사용해야 함을 유의하십시오. :-)