【问题标题】:Collect Numbers from a 2D Array从二维数组中收集数字
【发布时间】:2018-01-18 10:21:16
【问题描述】:

我想编写一个名为collectNums 的方法,它应该从二维对象数组中收集Number 类型的所有元素。然后我想将Number类型的所有元素收集到List中并返回。

这是我的代码:

public static List<Number> collectNums(Object nrAry[][])
{
    List<Number> numbers = new ArrayList<Number>();
    for(int i = 0; i < nrAry.length; i++) 
    {
        for(int j = 0; j < nrAry[i].length; j++)
        {
            if (nrAry[i][j] instanceof Number) 
            {
                numbers.add(j);
                numbers.add(i);
            }
        }
    }
    return numbers;
}

如果我没有说清楚,请告诉我。谢谢大家!

【问题讨论】:

  • 你的意思可能是numbers.add((Number)nrAry[i][j])
  • 这在我看来不是最佳实践。我认为最好采用Number的数组。
  • 感谢您的评论。这是我的讲师设定的任务,所以我不能改变太多的实际任务。
  • 这个问题将二维数组转换为列表。请看这个解决方案:stackoverflow.com/questions/11447780/…

标签: java arrays multidimensional-array


【解决方案1】:

您正在收集数组的索引,而不是存储在数组中的值。

public static List<Number> collectNums(Object nrAry[][])
{
   List<Number> numbers = new ArrayList<Number>();
   for(int i=0;i < nrAry.length; i++)  {
       for(int j=0;j < nrAry[i].length; j++) {
            if (nrAry[i][j] instanceof Number)  {
                numbers.add((Number)nrAry[i][j]);
            }
        }
    }
    return numbers;
}

【讨论】:

  • 哦,谢谢,我仍然遇到数组问题。我可能需要更多地阅读它。
【解决方案2】:

在 Java 8 中它可以更简单:

public static List<Number> collectNums(Object nrAry[][]) {
        return Arrays.stream(nrAry)
                .flatMap(Arrays::stream)
                .filter(x -> x instanceof Number)
                .map(x -> (Number) x)
                .collect(Collectors.toList());
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多