Java代码片段工具篇之StreamFilter过滤器简化写法
【摘要】
代码片段系列, 前面写了一个日期生成工具,受到很多同学的关注,再次在分享一个小编在业务中简化代码的过滤。 并没有技术难度和技巧,仅仅是对原生lambda的封装,简化使用语法。
JDK原生过滤器语法
其...
代码片段系列, 前面写了一个日期生成工具,受到很多同学的关注,再次在分享一个小编在业务中简化代码的过滤。
并没有技术难度和技巧,仅仅是对原生lambda的封装,简化使用语法。
JDK原生过滤器语法
其实很简单的过滤,但是使用JDK原生语法时候必须要.collect(Collector.toList)。如果当你已经明确要生成List
集合时候,这句就变得很多余,想想一下如果代码中出现很多这种多余的语法。其实是很糟糕的。
本文是对lambda语法过滤方法的封装,拿去使用即可。
1. 根据条件生成List集合
/**
* 根据条件生成List集合
*
* @param dataStream 数据流
* @param predicate 过滤条件
* @param <T> 数据泛型
* @return List
*/
public static <T> List<T> filter(Stream<T> dataStream, Predicate<? super T> predicate) {
return dataStream.filter(predicate).collect(Collectors.toList());
}
2. 根据条件过滤并转换生成新List集合
/**
* 根据条件过滤并转换生成新的list
* @param dataStream 数据流
* @param predicate 过滤条件
* @param applyMapping 数据类型转换函数
* @param <T> 原始数据类型
* @param <V> 新数据类型
* @return List
*/
public static <T, V> List<V> filter(Stream<T> dataStream, Predicate<? super T> predicate,
Function<? super T, ? extends V> applyMapping) {
return dataStream.filter(predicate).map(applyMapping).collect(Collectors.toList());
}
3. 查询唯一数据
/**
* 查询唯一数据
*
* @param dataStream 数据流
* @param predicate 过滤条件
* @param <T> 数据泛型
* @return List
*/
public static <T> Optional<T> filterSingle(Stream<T> dataStream, Predicate<? super T> predicate) {
List<T> filter = filter(dataStream, predicate);
if (filter == null || filter.isEmpty()) {
return Optional.empty();
}
if (filter.size() > 1) {
throw new DuplicateFormatFlagsException(filter.toString());
}
return Optional.ofNullable(filter.get(0));
}
4. 查询唯一数据(并指定异常类型)
/**
* 查询唯一数据并制定异常
*
* @param dataStream 数据流
* @param predicate 过滤条件
* @param <T> 数据泛型
* @param exceptionSupplier 异常生成
* @param <X> 异常泛型
* @return List
* @throws X Throwable
*/
public static <T, X extends Throwable> T filterSingle(Stream<T> dataStream,
Predicate<? super T> predicate,
Supplier<? extends X> exceptionSupplier) throws X {
List<T> filter = filter(dataStream, predicate);
if (filter == null || filter.isEmpty()) {
throw exceptionSupplier.get();
}
if (filter.size() > 1) {
throw exceptionSupplier.get();
}
return filter.get(0);
}
5. 使用方法
<dependency>
<groupId>com.hanframework</groupId>
<artifactId>common-toolkit</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>
文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。
原文链接:springlearn.blog.csdn.net/article/details/105872376
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)