Не конвертировать "нулевые" значения из массивов - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть 3 универсальных массива, каждый из которых имеет предопределенный размер 25. Например, если в массиве только 5 фактических значений, он отобразит эти 5, а не следующие 20 как ноль.Я не хочу отображать нулевые значения.Я что-то редактирую в toString?Мой toString

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

Контейнер, являющийся объектом массива, созданным из функции конструктора.Вот как выглядит мой вывод ..

Изображение вывода

Ответы [ 4 ]

0 голосов
/ 13 февраля 2019

Все методы Arrays.toString() создают представление всего массива .Если это не то, что вы хотите, то вам нужно выбрать другой подход.Например, вы можете сделать что-то вроде этого:

String result = Arrays.stream(container)
        .filter(Objects::nonNull)
        .map(Objects::toString)
        .collect(Collectors.joining(",", "[", "]"));
0 голосов
/ 13 февраля 2019

В дальнейшем, я предполагаю, что ваш контейнер выглядит примерно так: Something []container.

Pre-Java 8 с использованием StringBuilder:

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

Post-Java 8 с использованием потоков:

public String toString(){
    return Arrays.stream(container)
                 .filter(Objects::nonNull)
                 .map(Object::toString)
                 .collect(Collectors.joining(","));
}
0 голосов
/ 13 февраля 2019

Другое решение с потоком java8:

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

System.out.println(Arrays.toString(array));
0 голосов
/ 13 февраля 2019

Если вы используете java8 или более позднюю версию:

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