如果我有课
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();
}
}
但我不确定详细程度。它太冗长了吗?也许有一种简洁的方法来实现它?
答案 0 :(得分:2)
您有兴趣循环遍历SetEntry列表。
for (Map.Entry<String, String > entry : ops.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// ...
}
答案 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());
}