如何在forEach循环中使类可执行?

时间:2015-01-08 13:22:20

标签: java

如果我有课

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 个答案:

答案 0 :(得分:2)

您有兴趣循环遍历SetEntry列表。

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

可复制的:Iterate through a HashMap

答案 1 :(得分:0)

在这种情况下,请使用API docs中指定的#entrySet#keySet#values

在一般情况下,如果对象是实现接口Iterable,则可以使用增强型for循环对其进行迭代。大多数标准java集合都在实现这个接口。

答案 2 :(得分: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());
    }