【问题标题】:Remove null from old 2D array and put the not null elements in a new 2D array从旧的二维数组中删除 null 并将非 null 元素放入新的二维数组中
【发布时间】:2020-10-05 04:17:17
【问题描述】:

我正在尝试从旧的二维数组中删除空元素并将其放入新的二维数组中,但新的二维数组正在输出所有空元素。

String[][] status = new String[P][M];
String[][] newStatus = new String[P][M];

for (int i = 0; i < status.length; i++) {
    for (int j = 0; j < status.length; j++) {
        if (status[i][j] != null) {
            newStatus[i][j] = status[i][j];
        }
    }
}

原始二维数组:

[[O, X, null, O, O, null, null], [null, null, O, null, null, O, O]]

我希望它看起来像这样:

[[O, X, O, O], [O, O, O]]

它正在输出这个:

[[null, null, null, null, null, null, null],
 [null, null, null, null, null, null, null]]

我对二维数组不太熟悉,所以如果有人可以提供帮助,将不胜感激。

【问题讨论】:

    标签: java arrays sorting multidimensional-array null


    【解决方案1】:

    您可以遍历这个数组,并为每一行 filter 取出 null 元素并收集剩余的 toArray

    String[][] arr1 = {
            {"O", "X", null, "O", "O", null, null},
            {null, null, "O", null, null, "O", "O"}};
    
    String[][] arr2 = Arrays.stream(arr1)
            .map(row -> Arrays.stream(row)
                    // filter out null elements
                    .filter(Objects::nonNull)
                    // new array
                    .toArray(String[]::new))
            .toArray(String[][]::new);
    
    // output
    Arrays.stream(arr2).map(Arrays::toString).forEach(System.out::println);
    
    [O, X, O, O]
    [O, O, O]
    

    另见:Move null elements for each row in 2d array to the end of that row

    【讨论】:

      【解决方案2】:

      假设status 已分配值,我会尝试这样做以正确替换值。问题是数组是固定大小的(在这种情况下是 P 乘 M),所以除非你用一些东西替换空值,否则你不能减小 2D 数组的大小,或者每行/列都不同前面的长度,把二维数组想象成一个固定的正方形网格,每个值都在一个角上。

      String[][] status = new String[P][M];
      String[][] newStatus = new String[P][M];
      
      for (int i = 0; i < status.length; i++) {
          int y = 0;
          for (int j = 0; j < status.length; j++) {
              if (status[i][j] != null) {
                  newStatus[i][j - y] = status[i][j];
              } else {
                  newStatus[i][M - y - 1] = " ";
                  y++;
              }
          }
      }
      

      这应该提供

      [[O,X,O,O, , , ],[O, O, O, , , , ]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多