如何在操作 returns 可选方法的 lambda 中抛出异常
How to throw an exception in lambdas operating on methods which returns optional
我写了一些 lambda 表达式,它根据 return 可选的方法向地图添加了一些值。当键“A”下没有值时,我想抛出一些特定的异常。我正在使用 contains 检查地图但它看起来很糟糕:|我尝试使用 orElseThrow 但没有很好的结果。
有什么提示吗?
下面是一些示例代码:
package com.aa;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import com.aa.SomeExpection;
public class SomeCLass
{
Optional<String> methodA()
{
return Optional.empty();
}
Optional<String> methodB() {
return Optional.of("example");
}
Map methodC() throws SomeExpection {
Map<String, String> map = new HashMap<>(2);
methodA().flatMap(s -> {
map.put("A", s);
return methodB();
}).ifPresent(s -> map.put("B", s));
if (map.containsKey("A")) {
return map;
}
throw new SomeExpection();
}
}
这是等价的
Map methodC() throws SomeException {
Map<String, String> map = new HashMap<>(2);
map.put("A", methodA().orElseThrow(SomeException::new));
methodB().ifPresent(s -> map.put("B", s));
return map;
}
是的,你可以使用 orElseThrow
,像这样:
map.put("A", methodA().orElseThrow(() -> new SomeExpection()));
我写了一些 lambda 表达式,它根据 return 可选的方法向地图添加了一些值。当键“A”下没有值时,我想抛出一些特定的异常。我正在使用 contains 检查地图但它看起来很糟糕:|我尝试使用 orElseThrow 但没有很好的结果。
有什么提示吗?
下面是一些示例代码:
package com.aa;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import com.aa.SomeExpection;
public class SomeCLass
{
Optional<String> methodA()
{
return Optional.empty();
}
Optional<String> methodB() {
return Optional.of("example");
}
Map methodC() throws SomeExpection {
Map<String, String> map = new HashMap<>(2);
methodA().flatMap(s -> {
map.put("A", s);
return methodB();
}).ifPresent(s -> map.put("B", s));
if (map.containsKey("A")) {
return map;
}
throw new SomeExpection();
}
}
这是等价的
Map methodC() throws SomeException {
Map<String, String> map = new HashMap<>(2);
map.put("A", methodA().orElseThrow(SomeException::new));
methodB().ifPresent(s -> map.put("B", s));
return map;
}
是的,你可以使用 orElseThrow
,像这样:
map.put("A", methodA().orElseThrow(() -> new SomeExpection()));