2015-01-08 1 views
1

I 클래스forEach 루프에서 클래스를 실행 가능하게 만드는 방법은 무엇입니까?

public class Op { 
    public Map<String, String> ops; 
} 

가 어떻게 그것을 실행 foreach 루프에서 할 수있는 경우?

for (String key : op) { 
    System.out.println(op.ops.get(key)) 
} 

UPD

여기 내 솔루션

Op op = new Op(new HashMap<String, String>() {{ 
    put("a", "1"); 
    put("b", "2"); 
    put("c", "3"); 
}}); 

for (String key : op) System.out.println(op.map.get(key)); 

class Op implements Iterable<String> {  
    Map<String, String> map; 
    public Op(Map<String, String> map) { 
     this.map = map; 
    } 
    public Iterator<String> iterator() { 
     return map.keySet().iterator(); 
    } 
} 

입니다하지만 상세 확실하지 않다. 너무 장황하니? 어쩌면 구현이 훨씬 간결한 방법일까요?

+3

http://tutorials.jenkov.com/java-generics/implementing-iterable.html – buxter

+0

예. 좋은 예입니다. 그러나 별도의 Iterator 클래스를 작성할 필요가 없습니다. 최소의 코드 행을 사용하여 가능한 간결하게 코드를 작성해야합니다. – barbara

답변

2

SetEntry 목록을 루핑하는 데 관심이 있습니다. 의

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

Propable 중복이 정확한 경우 Iterate through a HashMap

0

는 사용 #entrySet, #keySet 또는 API docs에 지정된대로 #values.

일반적으로 객체는 Iterable 인터페이스를 구현하는 경우 향상된 for 루프를 사용하여 반복 가능합니다. 대부분의 표준 Java 콜렉션이이 인터페이스를 구현하고 있습니다.

0
public class Op implements Iterable<Map.Entry<String,String>> { 
public Map<String, String> ops; 

@Override 
public Iterator<Map.Entry<String,String>> iterator() { 
    return ops.entrySet().iterator(); 
} 

}

예 :

for (Map.Entry<String, String> n : testOp){ 
     System.out.println("Key: " + n.getKey() + " Value: " + n.getValue()); 
    } 
관련 문제