【问题标题】:Don't convert "null" values from Arrays不要从数组转换“空”值
【发布时间】:2019-02-13 15:26:14
【问题描述】:

我有 3 个通用数组,它们的预定大小均为 25。例如,如果数组中只有 5 个实际值,它将显示这 5 个,而不是接下来的 20 个为空。我不想显示任何空值。我是否在 toString 中编辑某些内容?我的 toString 是

public String toString(){
  return Arrays.toString(container);
}

容器是从构造函数创建的数组对象。这是我的输出的样子..

Picture of output

【问题讨论】:

  • 请在您的帖子中导入结果,不要使用外部链接。
  • 我不明白拍摄和上传屏幕照片似乎比将一行文本复制/粘贴到问题中更容易。
  • 不清楚什么是“通用数组”。你的意思是一个数组,其元素类型由类型变量给出?或者可能只是一个明确的Object[]
  • 对我来说听起来像是一个糟糕的数据模型。要么使用ArrayList 而不是数组,要么保留指向第一个空槽的顶部指针,以便您知道要打印数组的哪一部分。然后有许多打印选项。

标签: java arrays data-structures


【解决方案1】:

Arrays.toString() 方法都产生整个数组的表示。如果这不是您想要的,那么您需要选择不同的方法。例如,您可能会这样做:

String result = Arrays.stream(container)
        .filter(Objects::nonNull)
        .map(Objects::toString)
        .collect(Collectors.joining(",", "[", "]"));

【讨论】:

  • 我并没有真正看到它的 hacky 部分。至少没有与其他答案相比。
【解决方案2】:

在下文中,我假设您的容器类似于Something []container

使用 StringBuilder 的 Pre-java 8:

public String toString(){
    StringBuilder s = new StringBuilder();
    for (Something i : container) if (i!=null) s.append(i.toString()+",");
    return s.toString();
}

使用流的后 Java 8:

public String toString(){
    return Arrays.stream(container)
                 .filter(Objects::nonNull)
                 .map(Object::toString)
                 .collect(Collectors.joining(","));
}

【讨论】:

  • 谢谢,稍后我会在使用笔记本电脑时尝试您的解决方案。
【解决方案3】:

假设您使用 java8 或更高版本:

Arrays.toString(Arrays.stream(container).filter(i->i!=null).collect(Collectors.toList()));

【讨论】:

    【解决方案4】:

    使用 java8 流的另一种解决方案:

    MyType[] array = Arrays.stream(originalArray)
                           .filter(Objects::nonNull)
                           .toArray(MyType[]::new);
        
    System.out.println(Arrays.toString(array));
    

    【讨论】:

      猜你喜欢
      • 2018-06-12
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2022-09-30
      相关资源
      最近更新 更多