Как заменить «return optObj.isPresent ()? New Obj2 (optObj): null» в функциональном стиле? - PullRequest
0 голосов
/ 06 декабря 2018

Моя IDE (InteliJ) продолжает указывать мне, что мой код "Может быть заменен одним выражением в функциональном стиле", выделяя isPresent():

return timestamp.isPresent() ? new Obj2(timestamp.get()) : null;

timestamp инициализируется как Необязательный:

Optional<Date> timestamp = ...

Я предполагаю, что я должен использовать ifPresent.как это timestamp.ifPresent(Obj2::new).Но ifPresent является недействительным, и у меня нет возможности вернуть созданный Объект.Также не могу потом вернуть null.Есть ли решение для моего кода?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Кроме того, как и forEach(), ifPresent() принимает в качестве параметра параметр «Потребитель», что может привести к появлению побочных эффектов.Обычно вы используете его для распечатки или регистрации.

0 голосов
/ 06 декабря 2018

Вы правы, говоря, ifPresent возвращает void и, следовательно, не подходит в этом случае.Ваша IDE предлагает вам просто сделать:

timestamp.map(Obj2::new).orElse(null);

Это читается как "если Optional timestamp имеет текущее состояние, тогда передайте объект, который он содержит, в конструктор Obj2 и вернет этот новый Obj2 экземпляр в противном случае (orElse) возвращает null.


на другой ноте, IntelliJ IDEA может помочь вам сгенерировать код, который он предлагает.

, например, с учетом приведенного нижеснимок экрана:

enter image description here

Я просто нажал на "выделенную" часть и нажал "ALT + ENTER", и IntelliJ предлагает, следует ли заменить условие нафункциональный стиль.

...