这是我的另一个问题的分支:
然而,现在的问题是如何提供一个lambda解决方案,其中所有可选值都在最里面的作用域中可用:
B b = procA().flatMap(this::procB).orElseThrow(SomeException::new);
// Value from procA() is not available.
我的原始代码是:
void SomeMethod() {
procA().ifPresent(a -> {
procB(a).ifPresent(b -> {
// Do something with a
当在lambda中调用的函数抛出异常时,如果它想将此异常传递给首先调用getFieldHives的函数,是否有任何方法使用映射可选实体,则IDE强迫我将其包装在try/catch块中,当再次抛出它时,我将以try/catch循环结束。或者有其他方法来解决这个问题,我的主要目标是避免使用optionalFieldDAO.isPresent()和optionalFieldDAO.get()。
public List<HiveResponse> getFieldHives(String token, Long id) throws UserNotFoundException, Field
我喜欢现在在中。但是,我一直遇到的一个基本问题是,我还没有弄清楚如何以最好的方式(最容易阅读和理解,最漂亮,最短)解决问题:
当可选选项为空时如何从方法返回?
我正在寻找一个通用的解决方案,它适用于不同数量的选项和代码块大小的不同组合。
在下面的例子中,我将尝试展示我的意思:
void m1() {
// When I get an optional:
Optional<String> o = getOptional();
// And want to return if it's empty
if (!o.isPresent()) ret
我想在解析失败的情况下抛出一个自定义异常,但是编译器抱怨有一个来自parse()方法的未处理的parse()。
但我错过了什么?
我的代码:
public void validateConstraints(RequestType body) {
SimpleDateFormat simpleDateFormatYearMonth = new SimpleDateFormat("yyyy-MM-dd");
Date date = Optional
.ofNullable(body.date())
.map(sim
在java中,我试图使用可选的而不是标准的空检查。
@Data
public class InputObj {
private Double savings;
}
@Data
public class Result {
private String outputSavings;
}
public Result convertInputObjToResult(InputObj inputObj){
Result result = new Result();
Optional<InputObj> optionalInputObj = Option
我很想知道为什么Java的不提供类似于的peek方法。
peek接口的方法声明:
@apiNote这个方法主要是为了支持调试,在调试过程中,当元素流过管道中的某个点时,您希望看到它们
这几乎准确地描述了我的用例:
@Override
@Transactional
public User getUserById(long id) {
return repository.findById(id)
.peek(u -> logger.debug("Found user = {} by id = {}", u, id))
我有JAVA设计方面的考虑:我在选择:
服务返回可选值,控制器直接处理非当前情况下的服务,如果存在则返回真实对象,如果没有,则抛出异常。
有什么好的做法可以帮助我在这两种方法之间做出选择吗?
例如:选项1控制器:
public ResponseEntity<Product> findProductById(@PathVariable Long productId) {
return this.productService.getProductById(productId).map(
p -> ResponseEntity.ok(
假设我有一个简单的模型UserInfo和Passport:
public class UserInfo {
private int age;
private String passportId;
// getters, setters
}
public class Passport {
// empty
}
如果用户年龄超过20岁,我想看看他的护照,在Java7,我需要:
UserInfo userInfo = new UserInfo();
userInfo.setAge(22);
userInfo.setPassportId(nul
下面的方法起作用。
@GetMapping("/usuarios/{codigo_us}")
EntityModel<Usuario> one(@PathVariable Long codigo_us) { //HATEOAS way of forwarding resources
Usuario usuario = repository.findById(codigo_us)
.orElseThrow(() -> new UsuarioNotFoundException(codigo_us));
// Spring W
如果我直接调用@Cacheable (findById),它工作得很好。但是如果我从@Cacheput方法调用,它就不是工作。
@Cacheable(key = "#p0")
public User findById(String userId) {
User user = userRepository.findById(userId).orElseThrow(() -> new NotFoundException());
return user;
}
@CachePut(key = "#p0"