else语句的java代码

3okqufwl  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(280)

此问题已在此处找到答案

基于条件声明最终变量,并在java中的lambda中使用它[duplicate](3个答案)
四天前关门。
我想知道是否有什么好的技术可以使下面的代码更干净。

final Optional<Long> historyHours1;
final Optional<Double> historyHours2;
final Optional<Float> historyHours3;

if (parameters.isPresent()) {
  historyHours1 = // some logic
  historyHours2 = // some logic
  historyHours3 = // some logic
} else {
  historyHours1 = Optional.empty();
  historyHours2 = Optional.empty();
  historyHours3 = Optional.empty();
}

希望保持变量不变吗 final ,并使用一些技术来替换if-else。考虑使用方法进行计算并返回包含there变量的对象,但将there变量组合到一个对象中,这是不可取的。

pvcm50d1

pvcm50d11#

您可能不想使用 Optional 最后的三个变量。 Optional , OptionalDoubleOptionalLong 对于可能不存在的返回值,通常是非常好的。对于20行或更短的方法中的局部变量,它们实际上不会给您带来任何好处。根据我的口味,这同样适用于 final ,但我承认这里的观点更为多样。
如果你愿意,我的建议是 final 变量):

final Long historyHours1 = parameters.map(p -> /* some logic */).orElse(null):
final Double historyHours2 = parameters.map(p -> /* some logic */).orElse(null):
final Float historyHours3 = parameters.map(p -> /* some logic */).orElse(null):

重写的代价是我们要测试三次您的参数是否存在。这可能很好,但你需要自己称一下。
万一你坚持 Optional ,同样的想法也适用:

final OptionalLong historyHours1 = parameters.stream()
                                             .mapToLong(p -> /* some logic */)
                                             .findAny();

其他变量也类似。使用 OptionalDoubleOptionalLong . 及 Optional<Float> 既然没有 OptionalFloat 班级。即使是拆箱到 OptionalLongOptionalDouble 我们需要通过一个流,如代码行所示。
取决于您将使用的 historyHoursX 变量也有可能是一次重写,涉及到这是可能的,也是一次重写,利用 parameters 作为一个 Optional (当我猜对的时候)。因此,您可能希望向我们展示更多现有代码。

uelo1irk

uelo1irk2#

当您可能添加更多其他条件时,使用开关可能会有所帮助。

相关问题