【问题标题】:Iterating through nested arrays in Java遍历Java中的嵌套数组
【发布时间】:2017-05-28 14:15:50
【问题描述】:

我正在构建电子商务应用程序,我有一种情况需要划掉商店中没有的尺寸。

我用这样的示例修复了字符串数组列表:"36", "38", "40", "42" 我有这样的样本可用尺寸:"36", "38", "40"

现在我需要遍历第一个数组并删除那些不可用的大小。

这是我正在执行的代码的一部分:

// tempSizes - available sizes
// mProduct.getSizes() - all sizes
for (String tempSize : tempSizes) {
      for (int i = 0; i < mProduct.getSizes().size(); i++) {
            if (tempSize.equals(mProduct.getSizes().get(i))) {
                 // if size is available
                 sizes.add(new Size(mProduct.getSizes().get(i), true));
            } else {
                 // if size is not available
                 sizes.add(new Size(mProduct.getSizes().get(i), false));
            }
      }
}

这里的问题是嵌套的 for 循环将被调用 3 次,结果将输出重复的样本。如果有更简单的方法可以做到这一点,请告诉我,我将不胜感激。

【问题讨论】:

  • 这些不是数组。不过,他们可能是ArrayLists。
  • 它们看起来像 list/arraylist api
  • 对不起,这是一个数组列表。
  • “结果将是三个具有一个可用大小的数组列表”我不明白:您不在这里创建 3 个数组列表,而是将所有内容添加到一个中。
  • 如果样本是36, 38, 40,可用尺寸是36, 38,输出将是36(available), 38, 40, 36, 38(available), 40,它应该是这样的:36(available), 38(available), 40

标签: java android arraylist


【解决方案1】:

您可以通过 ArrayList 使用一个 for 循环轻松完成此操作,例如:

List<Integer> samples = Arrays.asList(36, 38, 40 ,42);
List<Integer> available = Arrays.asList(36, 38, 40);
List<Integer> unavailable = new ArrayList<>();
for(int size : samples){
    if(!available.contains(size)){
        unavailable.add(size);
    }
}
System.out.println(unavailable);

这将遍历所有样本,检查它们是否可用,如果不可用,则将它们放入另一个列表。如果您有数组,可以使用Arrays.asList() 方法将它们转换为列表。

【讨论】:

  • unavailable.addAll(available); unavailable.removeAll(samples);.
  • @AndyTurner 我宁愿不更改现有的列表/数组,因为它们可能会被进一步使用。不过我同意这种方法。
  • @DusanDimitrijevic 如果解决了问题,您可以接受答案。
  • @DarshanMehta “我宁愿不更改现有列表”这会改变现有列表,不会多于或少于您的方法。
  • @AndyTurner 啊好吧,我以为是samples.removeAll(available),请忽略我之前的评论。
【解决方案2】:

试试这个代码

// mProduct.getSizes() - all sizes
for (int i = 0; i < mProduct.getSizes().size(); i++) {


    int prodSize = mProduct.getSizes().get(i);      
    boolean sizeFound = false;

    // tempSizes - available sizes
    for (String tempSize : tempSizes) {

            if (tempSize.equals(mProduct.getSizes().get(i))) {
                 // if size is available
                 sizes.add(new Size(prodSize, true));
                 sizeFound = true;
                 break;

            }

      }

      if(sizeFound == false){
           // if size is not available
           sizes.add(new Size(mProduct.getSizes().get(i), false));
      }

}

【讨论】:

  • 两个答案都有帮助,但我认为 Darshan 的方法要好一些,因为它不需要嵌套 for 循环并且代码更少。
  • 是的,同意你的看法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2017-05-13
  • 2017-09-08
  • 1970-01-01
  • 2021-08-18
  • 2010-12-06
  • 2020-07-25
相关资源
最近更新 更多