2 回答
TA贡献1802条经验 获得超5个赞
您可以通过可修改的 Map 支持不可修改的 Map。
它们具有相同的底层数据,但在不可修改的包装器中限制了对 setter API 的访问。
1即使您正在读取不可修改的地图,也会在更新可修改的地图时打印以下代码片段。您可能会注意到,它不会创建地图数据的两个副本,它们只是共享相同的值。
Map<String, String> modifiableMap = new HashMap<>();
Map<String, String> unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
modifiableMap.put("a", "1");
System.out.println(unmodifiableMap.get("a"));
但是,尝试unmodifiableMap.put("a", "1")将导致UnsupportedOperationException预期的结果。
对于您的代码,您可以尝试这样的操作:
public static void main(String args[]) {
Map<String, Object> modifiableMap = Maps.newHashMap();
Map<String, Object> unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
List<Runner> runners;
forEach(Runner runner: runners) {
Object obj = runner.run(unmodifiableMap);
modifiableMap.put(runner.name(), obj);
}
}
TA贡献1786条经验 获得超11个赞
如果您只是通过run方法中的键获取地图值,那么您可以Map使用Function接口包装:
class Runner {
public Object run(Function<String, Object> getter) {}
public String name() {}
}
public static void main(String args[]) {
Map<String, Object> map = new HashMap<>();
List<Runner> runners;
for(Runner runner: runners) {
Object obj = runner.run(map::get);
map.put(runner.name(), obj);
}
}
添加回答
举报
