首页 > 其他分享 >STREAM流

STREAM流

时间:2024-07-06 20:10:35浏览次数:1  
标签:STREAM Stream stream List student Student new

Stream

Stream是一种流式结构.是jdk8的特性。为操作集合提供了很多好用的方法。可读性较低。

1 获取流的方式

public static void main(String[] args) {
        // 获取Stream流的方式
        // 方式一:
        // 获取集合
        List<Integer> list = Arrays.asList(1,2,3,4,5,6);
        // 获取集合的Stream流
        Stream<Integer> stream = list.stream();
        
        // 方式二:
        Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5, 6, 7);
        
        // 方式三:
        List<Integer> list1 = Arrays.asList(1, 2, 3, 4);
        List<Integer> list2 = Arrays.asList(5, 6, 7, 8);
        List<Integer> list3 = Arrays.asList(5,6,8,9);
        Stream<Integer> stream2 = Stream.concat(list1.stream(), list2.stream());
        Stream<Integer> stream3 = Stream.concat(stream2, list3.stream());
    }

2 Stream的使用

  • 对集合的数据进行去重/降序排列,并且获取前3个值
private static void method1() {
//        对集合的数据进行去重/降序排列,并且获取前3个值
        List<Integer> list = new ArrayList<>();
        Collections.addAll(list,1,34,66,7,5,22,89,54,89,66,7,45);
        //
//        // 把list转换成TreeSet
//        TreeSet<Integer> set = new TreeSet<>(list);
//        System.out.println(set);
//        List<Integer> dataList = new ArrayList<>();
//        for (int i = 0; i < 3; i++) {
//            Integer integer = set.pollLast();
//            dataList.add(integer);
//        }
//        System.out.println(dataList);

        // 获取流
        Stream<Integer> stream = list.stream();
        // 去重
        Stream<Integer> stream1 = stream.distinct();
        // 降序排序    默认是升序
        Stream<Integer> stream2 = stream1.sorted(Comparator.reverseOrder());
        // 对结果的数量进行限定
        Stream<Integer> stream3 = stream2.limit(3);
        List<Integer> collect = stream3.collect(Collectors.toList());
        System.out.println(collect);

        // 链式调用
        List<Integer> collect1 = list.
                stream().
                distinct().
                sorted(Comparator.reverseOrder()).
                limit(3).
                collect(Collectors.toList());
        System.out.println(collect1);
    }
  • 统计多个集合中的最大最小值,平均值,求和。降序排序并去重后获取结果。
private static void method2() {
        // 统计多个集合中的最大最小值,平均值,求和。降序排序并去重后获取结果。
        List<Integer> list1 = Arrays.asList(1, 2, 4, 5, 6, 7, 8);
        List<Integer> list2 = Arrays.asList(13, 15, 16, 17, 18, 20,5,6);
        List<Integer> list3 = Arrays.asList(67, 45, 89, 55, 3,7,8);
        // 将多个数据源合并到一个Stream流中
//        Stream<Integer> stream = Stream.concat(list1.stream(), Stream.concat(list2.stream(), list3.stream()));
        // 匿名内部类
//        Stream<Object> stream = Stream.of(list1, list2, list3).flatMap(new Function<List<Integer>, Stream<?>>() {
//            // 参数就是合并之后的集合
//            @Override
//            public Stream<?> apply(List<Integer> integers) {
//                return integers.stream();
//            }
//        });
        // lambda表达式
//        Stream.of(list1,list2,list3).flatMap(integers -> integers.stream());
        List<Integer> list = Stream.of(list1, list2, list3)
                .flatMap(List::stream)
                .distinct()
                .sorted(Comparator.reverseOrder())
                .collect(Collectors.toList());
        System.out.println(list);

        // 匿名内部类方式
//        list.stream().mapToInt(new ToIntFunction<Integer>() {
//            @Override
//            public int applyAsInt(Integer value) {
//                return value.intValue();
//            }
//        });
        // lambda表达式
//        list.stream().mapToInt(v -> v.intValue());
        // sum终止操作
        int sum = list.stream().mapToInt(Integer::intValue).sum();
        System.out.println("和是" + sum);

        IntSummaryStatistics intSummaryStatistics = list.stream().mapToInt(Integer::intValue).summaryStatistics();
        // 平均值
        System.out.println(intSummaryStatistics.getAverage());
        // 求和
        System.out.println(intSummaryStatistics.getSum());
        // 最大值
        System.out.println(intSummaryStatistics.getMax());
        // 最小值
        System.out.println(intSummaryStatistics.getMin());
        // 长度
        System.out.println(intSummaryStatistics.getCount());

    }
  • 统计集合中名称带m,分数>90的人,根据成绩进行降序排序,根据id升序排序
    private static void method3() {
        List<Student> students = Arrays.asList(
                new Student(1, "tom", 97),
                new Student(2, "jerry", 95),
                new Student(3, "peiqi", 89),
                new Student(4, "qiaozhi", 93),
                new Student(5, "amianbaobao", 88),
                new Student(6, "ggbrand", 100),
                new Student(7, "mike", 99),
                new Student(8, "mini", 97)
        );
        // 统计集合中名称带m,分数>90的人,根据成绩进行降序排序,根据id升序排序

        // 传统方式实现
//        List<Student> dataList = new ArrayList<>();
//        for (Student student : students) {
//            if (student.getName().contains("m") && student.getScore() > 90){
//                dataList.add(student);
//            }
//        }
//        System.out.println(dataList);
//        dataList.sort(Comparator.comparing(Student::getScore).reversed().thenComparing(Student::getId));
//        System.out.println(dataList);

//        students.stream().filter(new Predicate<Student>() {
//            // 对集合中的结果进行过滤
//            // 返回true,就留在集合的流中
//            // 返回false,就被过滤掉
//            // 参数是集合中的元素
//            @Override
//            public boolean test(Student student) {
//                return student.getScore() > 90;
//            }
//        }).filter(new Predicate<Student>() {
//            @Override
//            public boolean test(Student student) {
//                return student.getName().contains("m");
//            }
//        });

//        students.stream().filter(new Predicate<Student>() {
//            // 对集合中的结果进行过滤
//            // 返回true,就留在集合的流中
//            // 返回false,就被过滤掉
//            // 参数是集合中的元素
//            @Override
//            public boolean test(Student student) {
//                return student.getScore() > 90 && student.getName().contains("m");
//            }
//        });
        List<Student> list = students.stream()
                .filter(student -> student.getScore() > 90 && student.getName().contains("m"))
                .sorted(Comparator.comparing(Student::getScore).reversed().thenComparing(Student::getId))
                .collect(Collectors.toList());

        // lambda表达式
//        List<Student> list = students.stream()
//                .filter(student -> student.getScore() > 90)
//                .filter(student -> student.getName().contains("m"))
//                .sorted(Comparator.comparing(Student::getScore).reversed().thenComparing(Student::getId))
//                .collect(Collectors.toList());
//        list.forEach(System.out::println);
    }
  • 把集合中的学生名称全部转换成大写,获取名称中带M的
    private static void method4() {
        List<Student> students = Arrays.asList(
                new Student(1, "toM", 97),
                new Student(2, "jerry", 95),
                new Student(3, "peiqi", 89),
                new Student(4, "qiaozhi", 93),
                new Student(5, "amianbaobao", 88),
                new Student(6, "ggbrand", 100),
                new Student(7, "mike", 99),
                new Student(8, "mini", 97)
        );
        // 获取集合中所有的学生名称并且转换成大写,获取名称中带M的

//        List<String> nameList = new ArrayList<>();
        // 传统写法
//        for (Student student : students) {
//            nameList.add(student.getName().toUpperCase());
//        }
//        System.out.println(nameList);
        // 泛型第一个表示参数的类型  第二个表示返回值类型
        // 通过map方法,可以获取类的任意一个属性
//        students.stream().map(new Function<Student, String>() {
//            @Override
//            public String apply(Student student) {
//                return student.getName().toUpperCase();
//            }
//        });
        // 最终写法
        List<String> collect = students.stream()
                .map(student -> student.getName().toUpperCase())
                .filter(str -> str.contains("M"))
                .collect(Collectors.toList());
        System.out.println(collect);
    }
  • 把集合中的学生成绩减5分
    private static void method5() {
         List<Student> students = Arrays.asList(
                        new Student(1, "toM", 97),
                        new Student(2, "jerry", 95),
                        new Student(3, "peiqi", 89),
                        new Student(4, "qiaozhi", 93),
                        new Student(5, "amianbaobao", 88),
                        new Student(6, "ggbrand", 100),
                        new Student(7, "mike", 99),
                        new Student(8, "mini", 97)
                );
         // 把每个学生的成绩都减5分
        // 匿名内部类
//        students.stream().map(new Function<Student, Student>() {
//            @Override
//            public Student apply(Student student) {
//                student.setScore(student.getScore() - 5);
//                return student;
//            }
//        });
        // 对类中属性执行相同行为的时候,可以使用map也可以使用peek ,建议使用peek
        //lambda表达式
//        List<Student> collect = students.stream().map(student -> {
//            student.setScore(student.getScore() - 5);
//            return student;
//        }).collect(Collectors.toList());
//        System.out.println(collect);
//        students.stream().peek(new Consumer<Student>() {
//            @Override
//            public void accept(Student student) {
//                student.setScore(student.getScore() - 5);
//            }
//        });
        List<Student> collect = students.stream().peek(student -> student.setScore(student.getScore() - 5)).collect(Collectors.toList());
        collect.forEach(System.out::println);
    }

标签:STREAM,Stream,stream,List,student,Student,new
From: https://www.cnblogs.com/460759461-zeze/p/18287665

相关文章

  • netdot webapi发布centos stream 9 被dos攻击
    前言-刚刚发布一个demo一直被一个叼毛攻击,不停的扫描端口,弄得接口一访问就是503错误99元买了一个2核2g的服务器,1元钱买了一个服务器,有个人一直扫描我的端口安装一个 nginxdnfinstallnginx安装完成后启动nginx服务#启动systemctlstartnginx#设置开机自启动sys......
  • java中stream流的操作详解
    1.Java8之后引入的Stream流为我们提供了便捷的集合数据处理方式一,常用方法1.filter;过滤集合中符合条件的数据2.distinct();过滤掉集合中重复的元素,过滤的是所有元素都相同的对象3.sorted();对集合中元素进行排序,用来排序的元素类型必须是int才行4.limit(longn);返回前n个......
  • VMware开启CentOS Stream 9操作系统提示 “此主机支持 Intel VT-x,但 Intel VT-x 处于
    解决步骤:1.重启电脑2.华硕主板按(F2或DEL)键进入BIOS3.进入高级->CPU设置4.下拉,InterVirtualizationTechnology开启5.退出->保存改动参考网址:https://blog.csdn.net/web22050702/article/details/138712829......
  • webapi发布centos stream 8设置自动运行
    发布文件放到home下然后依次输入第一步:创建服务文件 首先,需要创建一个systemd服务文件。我们一般将这种服务文件放在/etc/systemd/system/目录下,并且给它一个.service后缀。例如,你可以创建一个名为wecharwebapi.service的文件。sudovi/etc/systemd/system/wecharwebapi......
  • 使用Redis实现消息队列:List、Pub/Sub和Stream的实践
    摘要Redis是一个高性能的键值存储系统,它的多种数据结构使其成为实现消息队列的理想选择。本文将探讨如何使用Redis的List、Pub/Sub和Stream数据结构来实现一个高效的消息队列系统。1.消息队列的基本概念消息队列是一种应用程序之间进行通信的机制,允许应用程序以异步的......
  • CentOS Stream 8 发布.net 8 webapi
    参考资料https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-rhel#where-is-centos-linux 微软好像不持支.net7所以把demo换成.net8sudodnfinstalldotnet-sdk-8.0 然后就开始报错,大致意思就是无法解析,找不到地址资源进入yum的repos目录cd/etc/yum.rep......
  • tengine/nginx https请求 转发 http upstream
    转载自:https://blog.csdn.net/windywolf301/article/details/135548805?spm=1001.2014.3001.5502为什么要将https转发为http当前的互联网应用基本都要支持https协议,而当浏览器头通过https协议将请求发到到负责负载的nginx后,会由当前nginx再以http协议向后端upstream进行请求,之所......
  • 56、Flink DataStream 的管理执行配置详解
    1)概述1.执行配置StreamExecutionEnvironment包含了ExecutionConfig,它允许在运行时设置作业特定的配置值。StreamExecutionEnvironmentenv=StreamExecutionEnvironment.getExecutionEnvironment();ExecutionConfigexecutionConfig=env.getConfig();以下是可用......
  • ubuntu中gstreamer缺少rtspserversink插件怎么安装这个插件?
    在Ubuntu中,如果GStreamer缺少rtspserversink插件,这通常意味着gst-rtsp-server模块没有正确安装或配置。rtspserversink是gst-rtsp-server库的一部分,它用于构建RTSP服务器,支持媒体流的发送。以下是详细的安装步骤,这些步骤将帮助你安装gst-rtsp-server及其相关插件:首先,你需要安......
  • Redis Stream 作为消息队列的详尽笔记
    概述RedisStream是Redis5.0版本引入的数据结构,用于消息传递。基础概念结构:消息链表,每个消息有唯一ID和内容。命名:每个Stream有唯一名称,对应RedisKey。消费组(ConsumerGroup):可挂载多个消费组,需手动创建。每个组有游标last_delivered_id,记录消费进度。消费......