gpt4 book ai didi

java 流 : elegant way to filter according an exception is thrown

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:53 27 4
gpt4 key购买 nike

有没有更优雅的方法来根据是否抛出异常进行过滤?

我的意思是,目前我的代码如下所示:

stream.filter(item -> {
try {
validator.with(reference)
.hasAccess(this.authzManager)
.isOwner();
} catch (EspaiDocFault | DataAccessException e) {
return false;
}
return true;
}
)

我想做的是,如果抛出异常,则必须过滤当前项目流。

我正在寻找任何现有的 util 类或类似的东西...

最佳答案

我在许多变体中看到的一种非常常见的方法是编写自己的功能接口(interface),允许抛出已检查的异常 (1) 并使该解决方案适应内置接口(interface) (2)。

/**
* An EPredicate is a Predicate that allows a checked exception to be thrown.
*
* @param <T> the type of the input to the predicate
* @param <E> the allowed exception
*/
@FunctionalInterface
public interface EPredicate<T, E extends Exception> {

/**
* (1) the method permits a checked exception
*/
boolean test(T t) throws E;

/**
* (2) the method adapts an EPredicate to a Predicate.
*/
static <T, E extends Exception> Predicate<T> unwrap(EPredicate<T, E> predicate) {
return t -> {
try {
return predicate.test(t);
} catch (Exception e) {
return false;
}
};
}

}

一个例子看起来很优雅:

.stream()
.filter(EPredicate.<ItemType, Exception>unwrap(item -> validator.[...].isOwner()))

在哪里,

  • ItemTypeitem的类型;
  • ExceptionEspaiDocFaultDataAccessException 的共同父级。

.stream()
.filter(EPredicate.unwrap(item -> validator.[...].isOwner()))

关于java 流 : elegant way to filter according an exception is thrown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53764580/

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