通过属性值查找对象

时间:2018-11-30 15:26:46

标签: java

我有两个班级,房间(属于一栋楼)和大楼(有n个房间)。建筑类具有“列表”类型的属性“房间”,而房间类具有“建筑”类型的属性“建筑物”。 Room和Building都是抽象类的后代。

我正在根据csv文件中的数据创建新房间。每个房间都有一个“ building_code”列。我想找到一个具有属性“代码”(该属性在抽象类中声明)的对应值的建筑物,将其添加到房间的“建筑物”属性中,同时将房间添加到Buldings的“房间”列表中。

由于我想在导入数据的类中使用此功能,因此应该在Building类中创建一个方法来与Buldings and Rooms(CRUD操作)一起使用的另一个类吗?通过以下代码,我在For循环的行上得到了“不兼容的类型”异常:

    public Building findByCode(String code, List buildings) {
            for (Building b : buildings) {
                if (b.code.equals(code)) {
                    return b;
                }
            }
            return null;
   }

2 个答案:

答案 0 :(得分:1)

正如注释和答案中所述,您可以通过声明List(List)的类型来解决异常问题。 但是关于该函数的位置,我同意“ Jason Armstrong”的想法,但是您也可以使用“ Utils”类并将此函数声明为静态方法。然后随便使用它。

public static Building findBuilding(String code, List<Building> buildings) {
            for (Building b : buildings) {
                if (b.code.equals(code)) {
                    return b;
                }
            }
            return null;
   }

答案 1 :(得分:0)

您应该将建筑物定义为List<Building>,而不仅仅是List。那应该可以解决您的编译错误。

对于这种类型的查找器方法,如果它是一个业务对象,那么构建似乎是一个好地方。如果是模型/ DTO,则将逻辑放在其他位置(服务方法/实用程序方法)。模型/ DTO应该很薄,即Java是否具有struct