gpt4 book ai didi

Java 8 - 流 - 过滤器中的方法有未处理的异常,try catch 期待返回语句

转载 作者:行者123 更新时间:2023-11-30 02:27:48 24 4
gpt4 key购买 nike

我正在使用函数调用来过滤流,如下所示 -

list.stream()
.filter(a -> !StringUtils.isEmpty(a.getProp1()))
.filter(a -> !a.getProp1().matches(“(.*)xyz"))
.filter(a -> {try {
return isValid(a.getProp1());
} catch (javax.naming.NamingException e) {
logger.error("Error");
}
})

我提到了question但我不想在 catch block 中抛出异常。我只是想记录一下。

我想保留在调用 isValid(a) 时返回 true 的记录,然后能够将其收集到如下所示的 HashSet 中 --

 //   .collect(Collectors.toCollection(HashSet::new));

从代码中这一定是显而易见的,但我是 java 8 的新手,仍在学习概念。请原谅任何幼稚的代码。感谢您的帮助。

最佳答案

在过滤时,如果 isValid 方法抛出 javax.naming.NamingException,除了记录异常之外,您可能还需要返回 false:

Set<Whatever> result = list.stream()
.filter(a -> !StringUtils.isEmpty(a.getProp1()))
.filter(a -> !a.getProp1().matches("(.*)xyz"))
.filter(a -> {
try {
return isValid(a.getProp1());
} catch (javax.naming.NamingException e) {
logger.error("Error");
return false;
}})
.collect(Collectors.toCollection(HashSet::new));

这是因为传递给 Stream.filter 方法的 Predicate 参数必须始终返回一个 boolean 值,无论它是否捕获了异常。

关于Java 8 - 流 - 过滤器中的方法有未处理的异常,try catch 期待返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45196596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com