4
我试图创建一个映射,将字符串值映射到函数。下面是我创建的接口(如Java中8,但我不能用它):创建一个通用类型的地图
interface Function<T, U> {
U apply(T t);
}
现在,我创建了一个排序方法基于某些属性我的POJO进行排序:
public <U extends Comparable<U>> void sortPojoBy(Function<Pojo, U> f) {
Collections.sort(list, new Comparator<Book>() {
@Override
public int compare(Pojo first, Pojo second) {
return f.apply(first).compareTo(f.apply(second));
}
});
}
然后我可以把它传递函数的匿名类由我想要的属性进行排序,例如:
sortBooksBy(new Function<Pojo, Double>(){
@Override
public Double apply(Pojo p) {
return p.getPrice();
}
});
现在我有麻烦创建地图。理想情况下,我想是这样的:
Map<String, Function<Pojo, T extends Comparable<T>>> map = new HashMap<>();
我知道,我不能做这样的事情,我目前的解决办法是建立一个原函数的地图。
private Map<String, Function> map = new HashMap<>();
{
map.put("price", new Function<Pojo, Double>(){
@Override
public Double apply(Pojo t) {
return t.getPrice();
}
});
map.put("name", new Function<Pojo, String>(){
@Override
public String apply(Pojo t) {
return t.getTitle();
}
});
}
我需要一张地图,因为我从JSON配置文件中获取属性值(名称,价格等)。
所以我的问题是,有没有什么办法来创建我的地图,以确保函数的类型T是可比较的? (我可以处理解决方法,现在,我将手动填充)
真的很好!谢谢 :) – user2336315 2014-10-26 20:43:38