Java 从条目的属性映射到条目的属性
我经常看到java中包含bean的对象列表,这些bean的对象是通过检查ID字段来拾取的,例如Java 从条目的属性映射到条目的属性,java,map,Java,Map,我经常看到java中包含bean的对象列表,这些bean的对象是通过检查ID字段来拾取的,例如 List<BeanObj> list = … BeanObj myObj = null; for(BeanObj b : list) if(b.getId().equals(whatIAmLookingFor)){ myObj = b; break; } 甚至 SpecialMap<String, BeanObj>("getR
List<BeanObj> list = …
BeanObj myObj = null;
for(BeanObj b : list)
if(b.getId().equals(whatIAmLookingFor)){
myObj = b;
break;
}
甚至
SpecialMap<String, BeanObj>("getRoot().getAttribute({0})", "id")
// use String getAttribute("id") on result of getRoot()
SpecialMap(“getRoot().getAttribute({0})”,“id”)
//对getRoot()的结果使用字符串getAttribute(“id”)
使用add()代替put(),它使用id getter函数来构建其内部映射?此映射可能需要映射对象实现一些接口,以允许在id字段上通知映射更新
也许地图还可以注意,将对象的ID更改为现有对象的ID是不可能的,或者会导致删除以前具有该ID的对象。您可以使用guava实用程序管理向地图添加元素的功能方面:
import com.google.common.base.Function;
public class SpecialMap<K, V> extends HashMap<K, V>{
private Function<V, K> function;
public SpecialMap(Function<V, K> function) {
this.function = function;
}
public void add(V value) {
K key = function.apply(value);
this.put(key, value);
}
public static void main(String[] args) {
SpecialMap<String, BeanObj> specialMap = new SpecialMap<String, BeanObj>(new Function<BeanObj, String>() {
@Override
public String apply(BeanObj arg) {
return arg.getRoot().getAttribute("id");
}
});
specialMap.add(new BeanObj());
}
}
import com.google.common.base.Function;
公共类SpecialMap扩展HashMap{
私人职能;
公共专用地图(功能){
这个函数=函数;
}
公共无效添加(V值){
K键=函数。应用(值);
这个.put(键、值);
}
公共静态void main(字符串[]args){
SpecialMap SpecialMap=新的SpecialMap(新函数(){
@凌驾
公共字符串应用(BeanObj arg){
返回arg.getRoot().getAttribute(“id”);
}
});
specialMap.add(新BeanObj());
}
}
在本例中,函数将把bean类型映射到字符串键
import com.google.common.base.Function;
public class SpecialMap<K, V> extends HashMap<K, V>{
private Function<V, K> function;
public SpecialMap(Function<V, K> function) {
this.function = function;
}
public void add(V value) {
K key = function.apply(value);
this.put(key, value);
}
public static void main(String[] args) {
SpecialMap<String, BeanObj> specialMap = new SpecialMap<String, BeanObj>(new Function<BeanObj, String>() {
@Override
public String apply(BeanObj arg) {
return arg.getRoot().getAttribute("id");
}
});
specialMap.add(new BeanObj());
}
}