番石榴 - 地图支持番石榴功能

时间:2014-09-12 10:38:06

标签: java map guava

我想创建一个由番石榴函数支持的只读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()函数。

非常感谢。

3 个答案:

答案 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); }
}