Java 番石榴-映射支持的番石榴函数
我想创建一个由番石榴函数支持的只读映射。给定一个键,我有一个提供值的函数Java 番石榴-映射支持的番石榴函数,java,map,guava,Java,Map,Guava,我想创建一个由番石榴函数支持的只读映射。给定一个键,我有一个提供值的函数 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
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()函数就可以了
非常感谢。如果可以的话,情况可能会相反。使用Functions.forMap()并为其提供一个映射,该调用将其转换为一个可以用作映射表的函数
我不确定你可以用番石榴做这件事。你可以用
Maps.toMap
做这件事,但是你需要提供Iterable
的钥匙
Function f = ...
Set keys = ...
Map map = Maps.toMap( keys, f );
如果没有这些键,地图就无法真正处理
.size()
或.entrySet()
我不太确定您在这里想要实现什么,但正如George提到的那样,类似这样的功能应该可以实现:
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); }
}
public类FunctionMap扩展了HashMap{
私人职能;
公共函数映射(函数){this.Function=Function;}
@凌驾
公共对象get(对象键){返回函数.apply(键);}
}
为什么不实现java.util.Map?get实现将调用您的函数,尽管您可以在size()、containsKey和其他一些函数中轻松决定要做什么……我更喜欢使用Guava函数,如果它存在的话,而不是创建我自己的实现。Guava中没有这样的东西。基本上,您希望为函数
使用一个映射
形状的包装器,而不是直接调用它,我不认为这是一个常见或常见的用例。为什么不直接调用函数
?这就是它的定义。MapMaker
支持这一点,但由于这是一个非常糟糕的想法,它被弃用并被推回。