【问题标题】:Im trying to loop over an array of objects to return the indexes where there is a match我试图遍历一个对象数组以返回匹配的索引
【发布时间】:2018-09-15 17:49:19
【问题描述】:

我正在尝试编写一个类,该类包含一个方法,该方法根据对象属性的搜索返回对象的索引列表。

我有一个数组 Car,它有 5 个对象,具有三个不同的属性 Color、Make、Model。

public class Car {
    String color;
    String make;
    String model;

public Car(String color, String make, String model){
        this.color = color;
        this.make = make;
        this.model = model;
}

 Car[] myCars =new Car[5];

        myCars[0]=new Car("red", "lexus", "rc350");           
        myCars[1]=new Car("white", "honda", "accord");
        myCars[2]=new Car("red", "honda", "accord");
        myCars[3]=new Car("black", "ford", "mustang");
        myCars[4]=new Car("gray", "lincoln", "navigator");

现在我正在尝试遍历这个数组,以便可以搜索给定的属性,例如颜色为红色,并且我希望将索引 0 和 2 添加到新列表中。

这样的事情是我正在尝试和思考的事情,希望它会返回一个 ArrayList 或“0”和“2”的数组:

public class SearchObject{
    List <Integer> getObject (String propertyName, String propertyValue)

searchobject. getObject(“color”,“red”);

我是 Java 和一般编程的新手,非常感谢任何帮助。提前致谢。

【问题讨论】:

  • 如果数据不经常更改,也可以预先填充哈希表(对象的每个属性/方面一个)以加快搜​​索速度

标签: java loops methods indexing match


【解决方案1】:

在 Java 中通过字符串搜索对象有点奇怪。您可以创建一个示例实体并填写您要搜索的变量。类似于下面的代码:

public class Car {
    String color;
    String make;
    String model;

    public Car(){

    }

    public Car(String color, String make, String model) {
        this.color = color;
        this.make = make;
        this.model = model;
    }

    public boolean equals(Car car){
        if(car.color!= null && !car.color.equals(this.color) )
            return false;
        else if(car.make!= null && !car.make.equals(this.make) )
            return false;
        else if(car.model!= null && !car.model.equals(this.model) )
            return false;

        return true;
    }

    public static void main(String[] args) {

        Car[] myCars = new Car[5];

        myCars[0] = new Car("red", "lexus", "rc350");
        myCars[1] = new Car("white", "honda", "accord");
        myCars[2] = new Car("red", "honda", "accord");
        myCars[3] = new Car("black", "ford", "mustang");
        myCars[4] = new Car("gray", "lincoln", "navigator");

        Car sampleCar = new Car();
        sampleCar.color = "red";

        List<Car> filteredCars = Arrays.stream(myCars).filter(i -> i.equals(sampleCar)).collect(Collectors.toList());
    }
}

【讨论】:

    【解决方案2】:

    一种方法是将布尔方法添加到您的Car 类。例如:

    public boolean isColor(String aColor){
        boolean ret = false;
        if(this.color.compareTo(aColor) == 0){
            ret = true;
        }
        return ret;
    }
    

    在for() 循环内嵌套switch 语句,并保存for 循环的任何索引为真。 switch 语句应该使用查询的第一部分来确定调用哪个方法:isColor()isMake()isModel()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-21
      • 2011-10-12
      • 2018-11-13
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多