Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 番石榴-映射支持的番石榴函数_Java_Map_Guava - Fatal编程技术网

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
支持这一点,但由于这是一个非常糟糕的想法,它被弃用并被推回。