Stream 流 集合操作(创建方法,中间方法,终结方法,静态方法)

本文介绍 Java 中 Stream API 的创建方式及使用技巧,包括中间操作如过滤、排序、去重等,以及终结操作如计数、收集等。通过实例演示如何高效地处理集合数据。

一、创建方法:
Collection:直接调用stream();
Map:先转为Collection,再调用stream();
数组:Arrays.stream();
单独对象:Stream.of();

//双列集合流
        Map<String,Integer> map = new HashMap<>();
        Stream<Map.Entry<String, Integer>> stream1 = map.entrySet().stream();
        //单列集合流
        ArrayList<Integer> list = new ArrayList<>();
        Stream<Integer> stream2 = list.stream();
        //基本数据类型数组流
        int[] arr = {1,2,3,4,5,6,6,7,8,21};
        IntStream stream3 = Arrays.stream(arr);
        //包装类数组流
        Integer[] arr2 = {1,2,3,4,5,5};
        Stream<Integer> stream4 = Arrays.stream(arr2);
        //数据生成流
        Stream<String> stream = Stream.of("123","qdqweq","1241rfq234r");
    

二、中间方法和终结方法
中间方法在执行后会返回一个被执行后的Stream,可继续调用方法。
终结方法不会返回,不能继续调用。
中间方法可调用多个,终结方法只能调用一个。

======== 中间方法 filter过滤 和 终结方法foreach遍历 =================

        //中间方法1 filter筛选  参数为    Predicate 谓词型接口,执行判断逻辑 ,true保留,false删除
        //终结方法 foreach遍历 参数为    Consumer 消费型接口,无返回值,只处理数据。
        list.stream().filter(i -> i > 7).forEach(i-> System.out.print(i+" "));

执行结果大于八的保留,其余全部过滤掉:
执行结果

=============== 中间方法sorted 排序和 distinct去重 ========================

        //中间方法2  sorter排序,参数为Comparator接口,排序
        //中间方法3  distinct去重  依靠元素本身的hashcode与equals
        list.stream().sorted((o1, o2) -> o2-o1).distinct().forEach(i-> System.out.print(i+" "));
       

执行结果 从大到小排序,并将重复的5去除
在这里插入图片描述

========= 中间方法 skip 跳过和 limit 保留 ==============================

        //中间方法4  skip 参数为 long  n,跳过前 n 个元素
        //中间方法5  limit 参数为 long n,保留前 n 个元素
        list.stream().skip(2).limit(4).forEach(i-> System.out.print(i+" "));

执行结果
在这里插入图片描述

========== 中间方法map 用来使用Function接口 ================

        Stream<String> stream = Stream.of("张三","李四","王五","赵六","老七","老八");
        //中间方法6 map 参数为Function<T,R> 功能型接口,其方法为apply,传入T,返回R,
        //随机生成学生,从大到小按年龄排序,保留年纪最大的三个人,打印
        stream.map(name->{
            Random r = new Random();
            return new Student(name,r.nextInt(17)+4);
        }).sorted((o1, o2) -> o2.getAge()-o1.getAge()).limit(3).forEach(student-> System.out.println(student));

执行结果:

在这里插入图片描述

========终结方法 count 计数 和 collect 转为集合 ======================

        //终结方法2 count  无参,返回一个long,为元素个数
        long count =  list.stream().count();
        //终结方法3 collect 参数为 Collector ,将流转化为list、set、map等集合
        list.stream().collect(Collectors.toList());
        list.stream().collect(Collectors.toSet());

三、静态方法

属于Steam的静态方法:
============== concat 将两个流合并========

 //静态方法 concat 两个流合并
        Stream concat =  Stream.concat(stream1, stream2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值