EJB HashMap如何实现比较两个对象的方法



这是一个EJB项目。我需要实现一个功能,比较两个或更多的对象,我可以添加或删除只有一个对象,一旦我点击"添加"或"删除"按钮。因此,我的想法是将对象存储在HashMap中,然后比较它们并选择最好的。但当我运行方法时,HashMap是空的。方法不能在其中添加对象。怎样才能使HashMap被操作。我的代码附在下面。

@Stateful
public class ComparePropertySessionBean implements ComparePropertySessionBeanRemote{
public HashMap<Integer, Double> map = new HashMap<Integer, Double>();
@Override
public int getBestPerRoom() {
    Iterator<Integer> iterator = map.keySet().iterator();
    int i = 0;
    double ave = 10000000000.00;
    if (iterator.hasNext()) {
        Integer key = iterator.next();
        if (map.get(key) <  ave) {
            i = key;
            ave = map.get(key);
        }
    }
    return i;
}
@Override
public void addCompareProperty(int propertyId, double price, int noofbedrooms) {
    if (!map.containsKey(propertyId)) {
        map.put(propertyId, price/noofbedrooms);
    }
}
@Override
public void removeCompareProperty(int propertyId) {
    if (map.containsKey(propertyId)) {
        map.remove(propertyId);
    }
}

}

map本身只有在类外的其他代码将其设置为null时才能为null。(这是不可能的,但你应该真正使map字段private原则上)。

看到堆栈跟踪会很好,但我看到的大问题是getBestPerRoom()中的逻辑错误:如果映射至少有一个条目,则此方法有效,但如果条目为空,则返回0。如果你的代码试图用propertyId来调用其他方法,他们将得到一个空条目,并且(如果他们没有仔细检查)将得到一个NPE。
为了避免这类问题,您需要正确处理没有条目存在的情况。

更一般地说,有更好的方法来构建这段代码——OO原则建议你应该使用Property类来封装关于不同属性的所有信息。然后,您可以通过编写Comparator(或只是将它们存储在TreeSet中)来按价格对它们进行排序。
如果您正在编写EJB应用程序,这还允许您使用JPA轻松地将Properties存储在数据库中。

最新更新