我想创建一个由番石榴函数支持的只读Map。我有一个函数,它给出了一个键,给出了一个值。
Function f = new Function() {
public Object apply(final Object key) {
return ...;
}
};
Map m = mapBasedOnFunction(f); // is this possible with Guava?
m.get(some key); // the value is provided by the function
这可能与番石榴有关吗?
我理解迭代,size(),...不起作用,这里不需要。实际上,我只需要使用get()函数。
非常感谢。
答案 0 :(得分:3)
您可以使用Maps.toMap
执行此操作,但需要提供Iterable
个密钥。
Function f = ...
Set keys = ...
Map map = Maps.toMap( keys, f );
如果没有按键,地图就无法真正处理.size()
或.entrySet()
。
答案 1 :(得分:0)
AFAIK反转是可能的。你使用Functions.forMap()并给它一个Map,这个调用变成一个可以作为映射表的函数。
我不确定你能用番石榴做到这一点。
答案 2 :(得分:0)
我不确定你要在这里完成什么,但是 - 正如乔治所提到的 - 这样的事情应该有效:
public class FunctionMap extends HashMap<Object, Object> {
private Function<Object, Object> function;
public FunctionMap(Function<Object, Object> function) { this.function = function; }
@Override
public Object get(Object key) { return function.apply(key); }
}