【问题标题】:Can we create objects of a class from a list of arrays?我们可以从数组列表中创建一个类的对象吗?
【发布时间】:2021-05-03 19:39:36
【问题描述】:

我们可以将数组的元素作为Java中某个类的对象的名称传递吗?假设我创建了一个带有一些属性的 Cars 类。

class Cars {
  int maxSpeed;
  int mileage;
  public double roadTax(int manufactureYear){
      int x = 150;
      while((manufactureYear<2021) && (manufactureYear > 2010)){
          for (int i = 2010; i < manufactureYear; i++)
          x += (x + (0.10 *x));
      return x;
  }
}

我们可以使用通常的代码为这个类创建一些对象

Cars Volvo = new Cars();

假设我有一个品牌字符串数组,我想为数组中的每个元素创建一个对象

String[] carBrands= {"Volvo","BMW","Renault","Ford", ..... }

有没有一种代码,我们可以将列表中的所有元素作为 Cars 类的对象传递,而不必为每个元素编写一个。

【问题讨论】:

标签: java arrays class oop object


【解决方案1】:

就个人而言,我会为此使用地图;

String[] carBrands = {"Volvo", "BMW", "Renault", "Ford"};
Map<String, cars> cars = new HashMap<>();
for (int i = 0; i < carBrands.length; i++) {
    cars.put(carBrands[i], new cars());
}

【讨论】:

    【解决方案2】:

    您已经在使用您的解决方案,只是方式不同。仅仅使用String[] 就告诉我你知道如何处理对象数组。

    这同样适用于您的汽车类。 您的类 Cars 中也没有指定构造函数。这将导致在调用 Cars Volvo = new Cars(); 时出现空的 Cars-Objects。如果您为该类生成了足够多的设置器,那可能是错误的。

    【讨论】:

      【解决方案3】:

      是的,你可以,这在 Java 中称为泛型类型。您可以将 Car 对象传递给数组列表,如下所示:

      ArrayList<Cars> arrCar = new ArrayList<>();
      

      这使您能够将许多不同的对象放入数组列表中,并且在遍历数组时,您可以在每个索引处访问它们的元素。这是一个很好的开始tutorial

      【讨论】:

        【解决方案4】:

        让我们修改您的类,使其具有品牌的 getter 和构造函数。

        class Cars {
          int maxSpeed;
          int mileage;
          String brand;
          public Cars(String brand) {
            this.brand = brand;
          }
          public double roadTax(int manufactureYear){
              int x = 150;
              while((manufactureYear<2021) && (manufactureYear > 2010)){
                  for (int i = 2010; i < manufactureYear; i++)
                  x += (x + (0.10 *x));
              return x;
          }
          public String getBrand() {
              return brand;
          }
        }
        

        然后您可以通过流式传输汽车品牌数组来创建地图。

        String[] carBrands = { "Volvo", "BMW", "Renault", "Ford" };
        
        Map<String, List<Cars>> carMap =
                Arrays.stream(carBrands).map(Cars::new).collect(
                        Collectors.groupingBy(Cars::getBrand));
        
        
        

        上面为每个品牌创建一个新的Car,然后将其添加到地图中,其中键是品牌,List&lt;Cars&gt; 是您创建的该品牌的所有卡片。

        如果每个品牌只有一种类型(即地图没有重复键),您可以这样做。

        Map<String, Cars> carMap1 =
                Arrays.stream(carBrands).map(Cars::new).collect(
                        Collectors.toMap(Cars::getBrand, car -> car));
        

        您可能希望将您的 Cars 类更改为 Car,因为它代表一辆汽车。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-11-23
          • 2014-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多