Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
Всем привет.
Подскажите такой момент - мне нужно избавиьться в приведенном на картинке коде от всех фильтров на нулл

сказали завернуть в Optional

хрен его знает что имели ввиду

я уже чего только не перепробовал не получается ничего

К сообщению приложен файл. Размер - 42Kb
12 май 20, 14:57    [22131256]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
Прикалываеся скрины делать?

Ну и как тебе туда изменнение внести?
12 май 20, 15:01    [22131259]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
mayton,щас набью руками- этот код внутри контура- его только скрином)
12 май 20, 15:04    [22131261]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
mayton,


List<AuthPersonParner> authPersons = Stream.of(dictionaryResponse)
                .filter(Objects::nonNull)
                .map(GetDictionaryResponse::getReturn)
                .filter(Objects::nonNull)
                .map(DictionaryInfo::getData)
                .filter(Objects::nonNull)
                .filter(dictionaryData -> ! dictionaryData.isEmpty())
                .findFirst()
                .orElse(Collections.emptyList())
                .strem()
                .filter(Objects::nonNull)
                .map(dictionaryData ->AuthPersonBuilder.from(dictionaryData.getColumns()))
                .collect(Collectors.toList());
12 май 20, 15:12    [22131268]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
забыл ник
Member

Откуда:
Сообщений: 3292
Zzz79


я уже чего только не перепробовал не получается ничего


И что конкретно перепробовано?
12 май 20, 15:14    [22131270]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
Теперь выкидывай из него все фильтры

Objects::nonNull


Запускай еще раз и говори где упал по NPE.
12 май 20, 15:18    [22131275]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
забыл ник
Member

Откуда:
Сообщений: 3292
mayton
Теперь выкидывай из него все фильтры

Objects::nonNull


Запускай еще раз и говори где упал по NPE.

Возвращаясь к нашему старому обсуждению - в Java, ПОТЕНЦИАЛЬНО может упасть везде.
Тут нет элегантного выхода, без монадных контекстов.
Можно конечно переписать все методы возвращающие данные на optional но как по мне это ничем не лучше чем каждый раз фильтровать на nonNull - та же шляпа. А вот с монадами все было бы круто стильно молодежно
12 май 20, 15:21    [22131277]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
mayton,

я не могу это запустить - к сожалению это запускается на стендах и поставить туда дебагер я не могу

тут исключительно в рамках теории везде где будут гетеры -потенциально может быть NullPointer
12 май 20, 15:21    [22131278]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
забыл ник
Zzz79


я уже чего только не перепробовал не получается ничего


И что конкретно перепробовано?

пытался делать лист Optioal но если я туда добавляю в качестве элемента нулл- то естесственно я упаду с нпе

я просто не пойму что от меня хотят- какая разница проверять Object::nonull или Optional.ifPresent
12 май 20, 15:25    [22131281]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
fixxer
Member

Откуда:
Сообщений: 791
Тут два момента, если null это невалидное состояние объекта, то нужно делать так, чтобы оно было невозможным, например делать проверку в конструкторе. Если валидное, то геттер должен возвращать Optional<T> getField() { return Optional.ofNullable(field); } или пустую коллекцию List<T> getCollection() { field == null ? Collections.emptyList() : field; }. Все остальное от лукавого. Скажи своему тимлиду, что он в голову долбится и у него Java 8 головного мозга.
12 май 20, 16:37    [22131366]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
Я пока вижу такой cмысл. Мы его обговаривали с месяц назад в этом форуме.
Если какая-то функция map() не может запроцессить значение (падает по исключению
например NumericException) то единственное умное что мы можем сделать это вернуть
Optional.empty() чтоб продолжить процессинг стрима.
12 май 20, 16:46    [22131375]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
chpasha
Member

Откуда:
Сообщений: 9222
fixxer
геттер должен возвращать Optional<T> getField() { return Optional.ofNullable(field); }
Brian Goetz не одобряе

Zzz79
P. S. если я правильно понял, то dictionaryResponse это экземпляр в кол-во 1 штука или нулл, по-этому имхо от тебя хотят чего-то вида
Optional.of(response)
	   .map() 
           //и погнали
12 май 20, 16:59    [22131389]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
Второй смысл. Операции агрегации стримов (collect, reduce, flatMap и прочие) по отношению
к потоку опционалов. Если они гладко обрабатывают Optional.isEmpty() (since 11) или
!Optinal.isPresent(since 8) и падает при попадании на пустой объект .
12 май 20, 17:09    [22131398]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
fixxer
Member

Откуда:
Сообщений: 791
chpasha
fixxer
геттер должен возвращать Optional<T> getField() { return Optional.ofNullable(field); }
Brian Goetz не одобряе




Браен пишет ровно то же что и я. Используйте Optional чтобы моделировать случай отсутствия значения в вашем API, а не как drop-in замену проверки на null.

Сообщение было отредактировано: 12 май 20, 18:41
12 май 20, 18:42    [22131458]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
chpasha
Member

Откуда:
Сообщений: 9222
fixxer
Браен пишет ровно то же что и я

неужели? каким чудом у нас

Our intention was to provide a limited mechanism for library method return types where there needed to be a clear way to represent "no result", and using null for such was overwhelmingly likely to cause errors


внезапно превращается в

геттер должен возвращать Optional<T> getField() { return Optional.ofNullable(field); }

или у нас уже getter это library method?

и далее цитата

I think routinely using it as a return value for getters would definitely be over-use

соответственно использование повсеместно Optional в getter-ах не рекомендуется.

кому же верить?
12 май 20, 19:13    [22131485]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
fixxer
Member

Откуда:
Сообщений: 791
chpasha,

хорош передергивать. я не говорил про все геттеры, но лишь про этот конкретный, если мы хотим смоделировать случай отсутствия значения. это именно то о чем пишет Гетц. Библиотека или слой приложения это в данном случае монопенисно.
12 май 20, 19:19    [22131489]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
fixxer
Member

Откуда:
Сообщений: 791
chpasha
I think routinely using it as a return value for getters would definitely be over-use

соответственно использование повсеместно Optional в getter-ах не рекомендуется.

кому же верить?


Ключевое слово тут routinely. Не стоит повсеместно лепить Optional как замену проверки на null. Стоит это делать там, где имеет смысл.
12 май 20, 19:22    [22131496]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
chpasha
fixxer
геттер должен возвращать Optional<T> getField() { return Optional.ofNullable(field); }
Brian Goetz не одобряе

Zzz79
P. S. если я правильно понял, то dictionaryResponse это экземпляр в кол-во 1 штука или нулл, по-этому имхо от тебя хотят чего-то вида
Optional.of(response)
	   .map() 
           //и погнали

именно в итоге я сделал вот это

К сообщению приложен файл. Размер - 34Kb
12 май 20, 20:06    [22131516]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
Жаль не могу проверить это все в действии- так как то что прилетает в этот методо в качестве параметра к сожалению вне нашего доступа ,очень бы хотелось сымитировать нулы

Сообщение было отредактировано: 12 май 20, 20:16
12 май 20, 20:11    [22131519]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mayton
Member

Откуда: loopback
Сообщений: 46600
А в чем проблема сымитировать нулы?
12 май 20, 22:53    [22131648]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1134
забыл ник
Возвращаясь к нашему старому обсуждению - в Java, ПОТЕНЦИАЛЬНО может упасть везде.

Аминь, брат.
13 май 20, 04:54    [22131748]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5298
Zzz79
Всем привет.
Подскажите такой момент - мне нужно избавиьться в приведенном на картинке коде от всех фильтров на нулл

сказали завернуть в Optional

хрен его знает что имели ввиду

я уже чего только не перепробовал не получается ничего


Не истины ради, а флейма для.
Почему не сделать тупо?

List<AuthPersonParner> authPersons = Stream.of(dictionaryResponse).map( s -> Optional.of(s))
...


Далее по тексту

<:o)
13 май 20, 06:48    [22131756]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5298
mad_nazgul,

Немного ошибся

List<AuthPersonParner> authPersons = Stream.of(dictionaryResponse).map( s -> Optional.ofNullable(s))
...
13 май 20, 07:05    [22131760]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
mayton
А в чем проблема сымитировать нулы?

проблема в том что и этот метод работает в адаптере ,который исключительно на стенде только может получать параметры от другого сервиса через soap к которому у меня вообще нет доступа
тоесть сымитировать что то локально я к сожалению не могу- локально этот сервис даже не запустится
13 май 20, 08:25    [22131781]     Ответить | Цитировать Сообщить модератору
 Re: Stream API избавиться от проверок на нул используя обертку Optional  [new]
Zzz79
Member

Откуда:
Сообщений: 178
mad_nazgul
mad_nazgul,

Немного ошибся

List<AuthPersonParner> authPersons = Stream.of(dictionaryResponse).map( s -> Optional.ofNullable(s))
...

ну я по сути так и сделал только без стрима - он тут лишний получается
13 май 20, 08:26    [22131783]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Java Ответить