有人能帮我处理下面的代码吗?我想要一个使用可选
函数的等价物。
public String getMyRequiredValue(Optional<String> value) {
if(value.isPresent()) {
Optional<String> optionVal = getAnotherValue(value.get());
if(optionVal.isPresent()) {
return optionVal.get();
} else {
return null;
}
} else {
return "Random";
}
}
public Optional<String> getAnotherValue(String value) { ... }
只是一个音符我试过这个,但它不工作
return value.map(lang -> getAnotherValue(lang).orElse(null)).orElse("Random");
不起作用的是-当值存在并且返回可选值时。empty()我希望原始函数返回null。它现在正在返回“随机”。
我的假设是,由于map
方法返回null
,它被"Random"
替换。
请注意,原始代码是由其他人编写的。由于它有很多依赖关系,我无法更改输入/输出参数。:(
最初由@Andreas在评论中提出的解决方案:
public String getMyRequiredValue(Optional<String> value) {
return value.isPresent() ? getAnotherValue(value.get()).orElse(null) : "Random";
}
我首先想到的解决方案。它打破了在调用get()之前总是需要检查isPresent()的规则,并引入了异常处理。因此,最好坚持第一个想法。
public String getMyRequiredValue2(Optional<String> value) {
try {
return getAnotherValue(value.get()).orElse(null);
} catch (NoSuchElementException e) {
return "Random";
}
}
我看到您试图使用地图和平面地图。如果它们导致可选。空()
,不清楚null的来源:它可能是value或getAnotherValue(value.get())。
我们可以通过保存来自value的值来跟踪它。将()
public String getMyRequiredValue3(Optional<String> value) {
final Holder<String> holder = new Holder<>();
return value.flatMap(i -> getAnotherValue(holder.value = i))
.orElse(holder.value == null ? "Random" : null);
}
同样,第一种方法仍然优于此。
编辑:正如@Holder所指出的,我们不需要上例中的Holder。相反,我们可以检查值。isPresent()
:
public String getMyRequiredValue4(Optional<String> value) {
return value.flatMap(this::getAnotherValue)
.orElse(value.isPresent() ? null : "Random");
}
我使用类型TreeMap定义了一个集合 我想返回与包含给定字符串值的列表配对的字符串(TreeMap键)。例如,我有一个字符串“bob”存储在列表中的一对中,我想返回与“bob”所在的对列表相关联的Treemap的键(字符串)。我将如何执行此操作?
是否有任何方法可以从NamedParameterJdbcTemplate返回可选的? 我的查询有时会返回空。所以我想要漂亮的方法来检查空。我不想做尝试捕捉空结果数据访问异常,因为这个有点丑。
我在mybatis文档和inet中搜索过。但找不到解决方案。 我的目标是:从myBatis动态SQL选择返回阉羊 不创建pojo作为数据库表的表示。 它应该看起来像: 1) 动态SQL: 2) 我在动态选择中输入的参数: } 3) 返回映射的方法:
问题内容: 如何通过使用和避免返回值? 例: 问题答案: 要返回可选值的值,或者返回默认值(如果可选值没有值),则可以使用。 请注意,我重写了查找最长名称的代码:您可以直接与比较器比较每个String的长度。可以通过调用键提取器作为方法引用来获得一个这样的比较器。
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的: def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回