【问题标题】:Create an Array of Objects from Arrays in Java从 Java 中的数组创建对象数组
【发布时间】:2019-10-28 11:22:04
【问题描述】:

我是 Android 和 Java 的新手,无法弄清楚这个看似基本的 for 循环设置来从其他两个数组中的数据创建对象数组。

它是这样工作的,但感觉不是很复杂。

//  RefineMenuItem is a public class
public class RefineMenuItem {
    private int imageIcon;
    private String title;
}

// imageIcon and title are arrays with seven values in them
int[] imageItems = { ... }        
String[] menuItems = { ... }

// Create the RefineMenu Objects
RefineMenuItem item1 = new RefineMenuItem(imageItems[0],menuItems[0]);
RefineMenuItem item2 = new RefineMenuItem(imageItems[1],menuItems[1]);
RefineMenuItem item3 = new RefineMenuItem(imageItems[2],menuItems[2]);
RefineMenuItem item4 = new RefineMenuItem(imageItems[3],menuItems[3]);
RefineMenuItem item5 = new RefineMenuItem(imageItems[4],menuItems[4]);
RefineMenuItem item6 = new RefineMenuItem(imageItems[5],menuItems[5]);
RefineMenuItem item7 = new RefineMenuItem(imageItems[6],menuItems[6]);

// Add the RefineMenu Objects to an ArrayList
ArrayList<RefineMenuItem> refineMenuList = new ArrayList<>();
refineMenuList.add(item1);
refineMenuList.add(item2);
refineMenuList.add(item3);
refineMenuList.add(item4);
refineMenuList.add(item5);
refineMenuList.add(item6);
refineMenuList.add(item7);

我相信我需要先创建对象数组,然后根据this question 添加到它。

    RefineMenuItem[] arr = new RefineMenuItem[7];

然后我相信我应该使用 for 循环添加到数组中,但这是我卡住的地方,在研究后无法弄清楚。感谢您为我指明正确的方向!

【问题讨论】:

    标签: java android arrays object


    【解决方案1】:

    您应该以这种方式将其添加到类数组中:

    import java.util.ArrayList.add
    
    RefineMenuItem[] items = new RefineMenuItem();
    for(int i=0 ; i<7 ; i++ ){
        RefineMenuItem thing = new RefineMenuItem(RefineMenuItem(imageItems[i],menuItems[i])
        items[i].add(i,thing))
    }
    
    

    【讨论】:

      【解决方案2】:
      //  RefineMenuItem is a public class
      public class RefineMenuItem {
          private int imageIcon;
          private String title;
      }
      
      // imageIcon and title are arrays with seven values in them
      int[] imageItems = { ... }        
      String[] menuItems = { ... }
      
      // create array list
      ArrayList<RefineMenuItem> refineMenuList = new ArrayList<>();
      
      // add items to the array list in a for loop
      for (int i = 0; i < imageItems.length; i++) {
        refineMenuList.add(new RefineMenuItem(imageItems[i], menuItems[i]));
      }
      

      这是假设 imageItemsmenuItems 总是相同的长度

      这样做的前提是您可以创建ArrayList,然后使用for循环遍历您的imageItemsmenuItems,从中创建一个新的RefineMenuItem,并将其添加到refineMenuList

      【讨论】:

        【解决方案3】:

        前提条件是imageItemsmenuItems 具有相同数量的元素。所以我首先要断言。

        然后可以新建一个大小相同的数组,并使用for循环进行迭代:

        int[] imageItems = { ... }        
        String[] menuItems = { ... }
        
        if (imageItems.length != menuItems.length) {
            throw new IllegalStateException("array lengths don't match");
        }
        
        RefineMenuItem[] result = new RefineMenuItem[imageItems.length];
        
        for (int i = 0; i < imageItems.length; ++i) {
            result[i] = new RefineMenuItem(imageItems[i], menuItems[i]);
        }
        

        此代码完成后,result 数组将被完全填充。

        【讨论】:

          【解决方案4】:

          不可能直接从两个数组创建ArraysList。首先,您需要创建一个 RefineMenuItem 对象数组并添加它们。但是,不要创建一个新数组来一次添加所有内容,而是在实例化它们时立即创建它们......就像:

          int size;
          if(imageItems != null && menuItems != null && menuItems.length == imageItems.length) {
              size = menuItems.length;
          } else {
              size = 0;
          }
          
          ArrayList<RefineMenuItem> refineMenuList = new ArrayList<>(size);
          
          for (int i = 0; i < size; i++) {
              refineMenuList.add(new RefineMenuItem(imageItems[i],menuItems[i]));
          }
          

          【讨论】:

            【解决方案5】:

            我相信一个基本的 for 循环可以解决你所有的问题。

            只需确保您之前进行了实施/声明。

            for(int i = 0; i<=6; i++) {
               RefineMenuItem item = new RefineMenuItem(imageItems[i],menuItems[i]);
               refineMenuList.add(item);
            }
            

            老实说,我有一段时间没有使用 java 了,所以可能会有一些语法错误,但逻辑解决方案应该是补充。

            【讨论】:

              猜你喜欢
              • 2020-12-17
              • 1970-01-01
              • 2019-09-09
              • 2011-07-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-12-06
              相关资源
              最近更新 更多