Java代码片段工具篇之StreamFilter过滤器简化写法

举报
西魏陶渊明 发表于 2022/09/25 02:50:38 2022/09/25
922 0 0
【摘要】 代码片段系列, 前面写了一个日期生成工具,受到很多同学的关注,再次在分享一个小编在业务中简化代码的过滤。 并没有技术难度和技巧,仅仅是对原生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

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。