2014-09-12 2 views
2

guava 함수가 지원하는 읽기 전용 맵을 생성하려고합니다. 나는 주어진 값을 제공하는 함수를 가지고있다.guava - 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 the function 

Guava에서 가능합니까?

iteration, size(), ...는 작동하지 않는다는 것을 알고 있습니다. 여기서는 필요하지 않습니다. 사실, get() 함수가 작동하기 만하면됩니다.

대단히 감사합니다.

+0

왜 java.util.Map을 구현하지 - 가져 오기 구현이 호출됩니다 함수, 비록 당신이 재미있게 size(), containsKey, 그리고 다른 것들을 결정할 것이다. – George

+0

내 구현을 만드는 대신 alteast가 있으면 Guava 함수를 사용하는 것을 선호한다. – Jeira

+2

구아바에는 그런 것이 없습니다. 기본적으로'Function'을 직접 호출하는 대신'Map' 형 래퍼를 원합니다. 공통적 인 또는 빈번한 유스 케이스라고 생각하지 않습니다. 왜 '함수'를 직접 호출하지 않을까요? 그것이 그 정의입니다. –

답변

0

AFAIK 역으로 가능합니다. Functions.forMap()을 사용하고이 호출이 매핑 테이블로 작동 할 수있는 함수가되는 Map을 제공합니다.

구아바에서 할 수 있을지 잘 모르겠습니다.

3

Maps.toMap과 함께 할 수 있지만 Iterable 키를 제공해야합니다.

Function f = ... 
Set keys = ... 
Map map = Maps.toMap(keys, f); 

키없이지도는 정말 .size() 또는 .entrySet()을 처리 할 수 ​​없습니다.

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