繁体   English   中英

在 java 中使用 lambda 表达式引发自定义异常

[英]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.");});

我会以不同的方式处理这个问题,并且更符合抛出异常。

  1. 否定您的过滤条件
  2. 使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM