[英]Throwing a custom exception with lambda expression in java
我环顾四周,但似乎找不到正确的答案。 我正在尝试减少我的代码,因为我有一个项目并且想要使用 lambda 表达式。 我是 lambda 的新手并且仍在练习它,我遇到了 lambda 的“异常处理”,但是,对于我的具体问题,我似乎找不到。
我有一个完整的项目要修复,但这里有一个我想减少的代码示例。
代码:
for (Customer allCustomers : cust.getAllCustomers()) {
if (customer.getEmail().equals(allCustomers.getEmail()))
throw new CustomerAlreadyExists(
"ERROR: Cannot add customer. email is already in use.");
}
我试过的:
cust.getAllCustomers()
.stream()
.filter(x -> x.getEmail().equals(customer.getEmail())
.forEach(throw new CustomerAlreadyExists(
"ERROR: Cannot add customer. email is already in use."));
我的问题似乎是抛出异常。 (不会编译)否则我认为表达式很好。 有没有办法用一个衬里抛出异常?
谢谢。 还在学习。
你可以这样做:
cust.getAllCustomers().stream()
.filter(x -> x.getEmail().equals(customer.getEmail())
.forEach(s -> {throw new CustomerAlreadyExists("ERROR: Cannot add customer. email is already in use.");});
我会以不同的方式处理这个问题,并且更符合抛出异常。
findAny()
和orElseThrow()
cust.getAllCustomers()
.stream()
.map(Customer::getEmail)
.filter(Predicate.not(customer.getEmail()::equals))
.findAny()
.orElseThrow(() -> throw new CustomerAlreadyExists(
"ERROR: Cannot add customer. email is already in use."));
这是一个迟到的答案,但也许值得使用Stream::anyMatch
来检查条件:
String email = customer.getEmail();
if (cust.getAllCustomers()
.stream()
.map(Customer::getEmail)
.anyMatch(email::equals)) {
throw new CustomerAlreadyExists("ERROR: Cannot add customer. email is already in use.")
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.