行业资讯 2025年08月6日
0 收藏 0 点赞 706 浏览 2327 个字
摘要 :

文章目录 1.Stream filter() 方法 2. Java Stream filter() 示例 2.1使用 Lambda 表达式过滤 Stream 2.2 使用自定义谓词过滤 Stream 2.3 过滤并收集到 List 中 2.4. St……




  • 1.Stream filter() 方法
  • 2. Java Stream filter() 示例
    • 2.1使用 Lambda 表达式过滤 Stream
    • 2.2 使用自定义谓词过滤 Stream
    • 2.3 过滤并收集到 List 中
    • 2.4. Stream filter() 和 map() 示例
    • 2.5 Stream filter() 中带有抛出异常的方法

    学习使用 Stream.filter(Predicate) 方法遍历所有元素,并通过 Predicate 参数过滤出符合给定条件(通过 Predicate 参数定义)的所有项目。

    1.Stream filter() 方法

    stream() 方法语法如下:

    Stream<T> filter(Predicate<? super T> condition) 
    

    Predicate 是一个函数式接口,表示从 Stream 中过滤出不匹配元素的条件。

    • filter() 是一个中间流操作。
    • 它返回一个由给定流中符合给定Predicate 的元素组成的流。
    • filter() 参数应该是一个无状态的Predicate ,应用于流中的每个元素以确定是否应该包含该元素。
    • Predicate 是一个函数式接口。因此,我们还可以传递 lambda 表达式。
    • 它返回一个新的 Stream,这样我们就可以使用适用于任何流的其它操作。

    2. Java Stream filter() 示例

    2.1使用 Lambda 表达式过滤 Stream

    在这个例子中,我们遍历一个数字流。我们将从流中找到所有偶数并打印到控制台。

    内联谓词 ‘n -> n % 2 == 0’ 是一个 lambda 表达式。

    import java.util.Arrays;
    import java.util.List;
     
    public class Main 
    {
        public static void main(String[] args) 
        {
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
     
            list.stream()
                .filter(n -> n % 2 == 0)
                .forEach(System.out::println);
        }
    }
    

    输出:

    2
    4
    6
    8
    10
    

    2.2 使用自定义谓词过滤 Stream

    这个例子重写了第一个例子。它使用 Predicate 类代替 lambda 表达式,尽管它们是相同的东西。

    注意:我们可以在Predicate 中编写任何条件,以符合业务要求。

    public class Main 
    {
        public static void main(String[] args) 
        {
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
             
            Predicate<Integer> condition = new Predicate<Integer>() 
            {
                @Override
                public boolean test(Integer n) {
                    if (n % 2 == 0) {
                        return true;
                    }
                    return false;
                }
            };
     
            list.stream().filter(condition).forEach(System.out::println); //246810
        }
    }
    

    2.3 过滤并收集到 List 中

    我们可以使用 collect(Collectors.toList()) 方法将过滤后的流的元素收集到列表中。

    这个例子重写了第一个例子。在此,我们将偶数收集到列表中,而不是将它们打印到控制台。

    public class Main 
    {
        public static void main(String[] args) 
        {
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
     
            List<Integer> evenNumbers = list.stream()
                        .filter(n -> n % 2 == 0)
                        .collect(Collectors.toList());
             
            System.out.println(evenNumbers); //[2, 4, 6, 8, 10]
        }
    }
    

    2.4. Stream filter() 和 map() 示例

    我们可以使用 map() 方法来收集流元素,然后在将其收集到列表之前将每个数字转换为平方数。

    public class Main 
    {
        public static void main(String[] args) 
        {
            List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
     
            List<Integer> evenNumbers = list.stream()
                        .filter(n -> n % 2 == 0)
                        .map(n -> n * n)
                        .collect(Collectors.toList());
             
            System.out.println(evenNumbers);//[4, 16, 36, 64, 100]
        }
    }
    

    2.5 Stream filter() 中带有抛出异常的方法

    用于Predicate 的方法返回布尔值。这些方法通常进行简单的值比较,不会抛出任何异常。

    但是,有时我们可能需要处理这种会抛出异常的方法,这种方法必须在 Predicate 中使用。

    要解决这个问题,我们必须使用 try-catch 语句来捕获受检查的异常。然后我们有两种选择:要么处理该异常,要么将其重新抛出为未受检查的异常。

    以下是处理 Predicate 中使用的受检查异常方法的代码示例:

    List<Integer> evenNumbers = list.stream()
        .filter(a -> {
                try {
                    return a.someMethodThrowingCheckedException();
                } catch (IOException e) {
                    throw new UncheckedException(e);
                }
            })
        .collect(Collectors.toList());

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9593.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号