【发布时间】:2021-03-13 19:23:03
【问题描述】:
我环顾了一会儿,但似乎找不到正确的答案。 因为我有一个项目并且想要使用 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."));
我的问题似乎与抛出异常有关。 (不会编译)否则我认为表达式很好。 有没有办法用一个衬里抛出异常?
谢谢。还在学习中。
【问题讨论】:
-
Iterable.forEach采用Consumer,其accept方法没有任何声明的检查异常。如果CustomerAlreadyExists是运行时异常,您的代码将起作用。如果需要抛出已检查异常,请通读How can I throw CHECKED exceptions from inside Java 8 streams? -
"我的问题似乎是抛出异常。" - 这是什么意思?它不编译吗?它的行为不符合预期吗?我会采取不同的方法:流,过滤,先查找,映射到异常(不要抛出它),检查存在,如果存在则抛出。但是,这不会是单行的。
标签: java exception lambda java-stream