Tag: 可选

Optional.ofNullable和方法链接

我对Optional.ofNullable方法感到惊讶。 有一天我写了一个应该返回Optional的函数: private Optional extractFirstValueFrom(InsightsResponse insight) { return Optional.ofNullable(insight.getValues().get(0).getValue()); } 我错误地认为Optional.ofNullable会阻止参数表达式中的任何NullPointerExceptions 。 现在我想我知道这是非常愚蠢的想法。 Java必须首先解析参数以将其传递给Optional.ofNullable调用。 但我有一个问题。 有没有一个很好的方法来实现我的目标? 我想从表达insight.getValues().get(0).getValue()一些整数值或null。 Null可以是表达式中的每一个: insight.getValues()或insight.getValues().get(0) 。 我知道我可以把它放在try / catch块中,但我想知道是否有更优雅的解决方案。

如果不是null – java 8样式

Java 8提供了Optional类。 之前(Java 7): Order order = orderBean.getOrder(id); if (order != null) { order.setStatus(true); pm.persist(order); } else { logger.warning(“Order is null”); } 所以在Java 8风格上: Optional optional = Optional.ofNullable(orderBean.getOrder(id)); optional.ifPresent( s -> { s.setStatus(true); pm.persist(s); //Can we return from method in this place (not from lambda) ??? }); //So if return take place above, we can […]

当我需要在Optional.orElse()上使用Optional.orElseGet()时

我需要对此作出明确的解释,即使我读到这个关于差异的链接 ,但没有明确的清晰度。 所以任何人都可以用代码向我解释这一点。

如何将Optional转换为OptionalInt?

我有一个可Optional ,我想“转换”为OptionalInt ,但似乎没有一个简单的方法来做到这一点。 这就是我想要做的(人为的例子): public OptionalInt getInt() { return Optional.ofNullable(someString).filter(s -> s.matches(“\\d+”)).mapToInt(Integer::parseInt); } 但是, mapToInt()方法没有。 我能想到的最好的是: return Optional.ofNullable(someString) .filter(s -> s.matches(“\\d+”)) .map(s -> OptionalInt.of(Integer.parseInt(s))) .orElse(OptionalInt.empty()); 但这似乎不够优雅。 我是否遗漏了JDK中可以使转换更优雅的东西?

在类中使用Optional作为属性是一个好习惯吗?

我在Java 8中读过一些关于Optional的目的(遗憾的是我不记得在哪里),我很惊讶作者没有提到在类中使用Optional作为属性。 由于我在课堂上经常使用选项,我想知道这是不是很好。 或者我可以更好地使用普通属性,当它们未设置时返回null ? 注意:看起来我的问题可能是基于意见的,但我觉得在课堂上使用Optional是不可取的(在阅读上述post后)。 但是,我喜欢使用它,并且找不到使用它的任何缺点。 例 我想举一个例子来澄清。 我有一个类Transaction ,它是这样构建的: public class Transaction { private Optional = Optional.empty(); …. VS public class Transaction { private Customer = null; …. 在检查Customer ,我认为使用transaction.getCustomer().isPresent()比使用transaction.getCustomer() != null更合乎逻辑。 在我看来,第一个代码比第二个代码更清晰。

Java 8的orElse没有按预期工作

考虑以下方法,如果该字段存在,则返回该字段,或者在找到该字段之前递归调用自身: private Field getField(Class clazz, String p) { Optional field = Arrays.stream(clazz.getDeclaredFields()) .filter(f -> p.equals(f.getName())) .findFirst(); return field.isPresent() ? field.get() : getField(clazz.getSuperclass(), p); } 虽然这有效,但我认为我可以缩短它: private Field getField(Class clazz, String p) { return Arrays.stream(clazz.getDeclaredFields()) .filter(f -> p.equals(f.getName())) .findFirst() .orElse(getField(clazz.getSuperclass(), p)); } 但奇怪的是, .orElse部分似乎总是被称为。 我在这里想念的是什么?