一个超级简单的问题:
下面是我使用传统三元运算符的普通Java代码?
public DateTime getCreatedAt() {
return !recordA.isPresent() ? recordB.get().getCreatedAt() : recordA.get().getCreatedAt();
}
public DateTime getCreatedAt() {
return recordA.map(
record -> record.getCreatedAt())
.orElse(recordB.get().getCreatedAt());
}
java.util.NoSuchElementException: No value present
为了避免急切地计算else-branch,请使用orelseget
,它接受功能接口supplier
的一个实例:
return recordA.map(
record -> record.getCreatedAt())
.orElseGet(() -> recordB.get().getCreatedAt());
昨天我不得不写了一段难看的代码,以便对一个对象的字段执行许多空检查,以避免来自三进制运算符构造的NPE。 有问题的代码: Q2:如何优化用于空检查的光荣if-else构造?
问题内容: 我似乎无法与三元运算符结合使用此代码的第一部分(+ =)。 我认为这段代码的工作方式如下: 但这是不正确的,因为这会导致控制台出现错误。 所以我的问题是我应该如何正确插入此代码? 问题答案: h.className = h.className + (h.className ? ‘ error’ : ‘error’) 您希望操作员为之工作,最好对此有所具体。 当然,不应有任何伤害 ,但这
问题内容: 我有2个不同的元组类型(Double,Double): 我想使用一个简单的if语句比较它们的值。就像是: 这将引发以下错误: 找不到’==’的重载,该重载接受提供的参数 我当前的解决方案是这样的功能: 我已经尝试编写扩展,但是不能使其用于元组。您对此问题是否有更优雅的解决方案? 问题答案: 更新资料 正如Martin R 在评论中指出的那样,最多可以将具有六个组成部分的元组与进行比
问题内容: 我已经知道如何用辛苦的方式做到这一点,并使它起作用-遍历条目并“手动”交换。但是我想知道是否可以像许多任务一样以一种更优雅的方式解决这一问题。 我可以假设我的地图是双射的,顺便说一句:) 问题答案: 标准的API / Java运行时不提供双向映射,因此唯一的解决方案是遍历所有条目并手动交换它们。 您可以做的是创建一个包装器类,该包装器类包含两个映射,并且在内部进行双重处理,因此您可以快
问题内容: 考虑以下代码: 将 编译器 优化生产线类似于: (或者: )? 问题答案: 不知道您是否要问哪个对应于编译器将对原始表达式进行的处理,在这种情况下,答案是: 都不- 在示例中,您两次调用map.get();编译器无法知道没有副作用,因此在找到值时它将调用两次。 可能最接近 或者,如果您要问哪种选择最有效,那么答案是: 第二种选择可能会稍好一些,因为它不需要其他局部变量。附加的局部变量对
问题内容: 有没有一种方法可以优雅地停止和及其相关联的。 我正在努力实现的目标。 停止使用消息。 优雅地停下来。 等待长期运行的消费者,并在完成后确认。 我可以停止使用,但是长期运行的使用者不会成功完成,并且一旦ListenerContainer恢复后,已处理的消息也不会被确认,因此将再次进行处理。 输出量 邮件已处理,但未确认。 我也许可以使用来实现正常关机,但是是否可以验证被取消的使用者是否已