Строка объединяет нулевое значение и получает нулевое значение Java - PullRequest
0 голосов
/ 17 января 2019

Я использую Stream.of для объединения пары строковых значений с разделителем «:», одно из них может быть нулевым, но когда я получаю его в массив строк, я хочу иметь фиксированное число элементы в этом массиве. Я хотел бы знать, какой из строкового массива является нулевым. Например, я связал строку с помощью

Stream.of("abc", "def", "ghi", null)
            .collect(Collectors.joining(":"));

Это будет "abc: def: ghi: null". Затем разбить его на массив строк, я использую

final String[] strings = "abc:def:ghi:null".split(":");

Но строки [3] имеют значение «ноль» вместо «ноль». Есть ли способ привести «ноль» к нулевому значению?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Строка "null" не null. Вам необходимо отфильтровать ваш результат:

final String[] strings = Arrays.stream("abc:def:ghi:null".split(":")).filter(str -> str.equals("null")).toArray(String::new);

EDIT:

Извините, я не правильно прочитал. Если вы хотите сопоставить "null" с null, то просто:

final String[] strings = Arrays.stream("abc:def:ghi:null".split(":")).map(str -> str == "null" ? null : str).toArray(String[]::new);
0 голосов
/ 17 января 2019

Вы должны обработать отображение null как постобработку:

String[] strings =  "abc:def:ghi:null".split(":");
strings = Arrays.stream(strings).map(s-> s.equals("null")? null : s).toArray(String[]::new);
System.out.println(strings[3] == null);

отпечатки true.

Обратите внимание, что здесь вы не знаете, использовалась ли null или строка "null" в начале источника в потоке, поскольку вы не можете их дифференцировать после присоединения к строке.

...