gpt4 book ai didi

java - 从入口属性到入口的映射

转载 作者:行者123 更新时间:2023-12-01 12:46:55 26 4
gpt4 key购买 nike

我经常看到java中持有bean的对象列表,这些bean的对象是通过检查ID字段来选择的,即

List<BeanObj> list = …

BeanObj myObj = null;
for(BeanObj b : list)
if(b.getId().equals(whatIAmLookingFor)){
myObj = b;
break;
}

(第二个变体是将对象存储在 Hibernate 中并通过 SQL 检索它们。)

使用 map 界面在这里确实是明智的,但也有困难,即

  • 关键字段可能会更改(通常,甚至同时更改)
  • 这个键可能并不容易到达(想想b.getRoot().getAttribute("id").equals(…)

是否有更有效的方法来解决这个问题,例如实现一个

SpecialMap<String, BeanObj>("id") // use String getId() on BeanObj

甚至

SpecialMap<String, BeanObj>("getRoot().getAttribute({0})", "id")
// use String getAttribute("id") on result of getRoot()

使用 add() 而不是 put() ,它利用 id getter 函数来构建其内部映射?可能此 map 将要求映射对象实现某些接口(interface),以允许 map 收到 id 字段更新的通知。

也许 map 还可以注意,将对象的 ID 更改为现有对象的 ID 是不可能的,或者会导致删除以前具有该 ID 的对象。

最佳答案

您可以使用 Guava 实用程序来管理向 map 添加元素的功能:

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

在此示例中,该函数会将您的 bean 类型映射到字符串键。

关于java - 从入口属性到入口的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24605696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com