Java 8 дополнительно отображать и выполнять различные функции - PullRequest
0 голосов
/ 21 июня 2019

Каким должен быть Java 8 эквивалент

if ( indicator != null ){
   return getTest(a,indicator);
else{
   return getTest(a);
}

, если indicator будет Optional вместо nullable?

Ответы [ 4 ]

2 голосов
/ 21 июня 2019

Вероятно, провоцирующий ответ, но версия Java 8:

if (indicator != null){
   return getTest(a,indicator);
}
else{
   return getTest(a);
}

- это то же самое:

if (indicator != null){
   return getTest(a,indicator);
}
else{
   return getTest(a);
}

И на самом деле я, вероятно, использовал бы этот более краткий способ:

if (indicator != null){
   return getTest(a,indicator);
}
return getTest(a);

В вашем случае использование Optional с такими «цепочечными» методами, как:

return indicator.map(i -> getTest(a, i)).orElseGet(() -> getTest(a));

, скрывает логику потока, в то время как фактический код показывает, что это прекрасно: у вас есть два разных случая.В общем случае вы хотите объединить обработки / преобразования, но не хотите связывать сценарии разветвления, поскольку это разные сценарии.
Если вы хотите использовать Optional, чтобы передать факт, что этот объект может быть null, что вполне законно, я бы, вероятно, сделал что-то, что имитирует ясную логику if-else:

Optional<Indicator> optIndicator = findIndicator();
if (indicator.isPresent()){
   return getTest(a,indicator.get());
}
return getTest(a);
2 голосов
/ 21 июня 2019

Вы можете написать:

Java

Optional<Boolean> indicator = ...;
return indicator.map(i -> getTest(a, i)).orElseGet(() -> getTest(a));

Но не всегда Optional лучше простого null.

0 голосов
/ 22 июня 2019

Вы можете написать это просто:

boolean indicator = ...;
return indicator ?  getTest(a, i) : getTest(a);

Или

Optional<Boolean> indicator = ...;
return indicator.orElse(false) ?  getTest(a, i) : getTest(a);
0 голосов
/ 21 июня 2019

Просто вы можете написать:

Без временной сложности и пространства.

Optional<Boolean> indicator = ...;
    if(indicator.isPresent()) {
        // value is present inside Optional
        return getTest(a,indicator);
    } else {
        // value is absent
      return getTest(a);
    }   
...