当前位置: 首页 > article >正文

java的Stream流

一、遍历与统计

  // forEach遍历
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "张无忌", "张三A", "张三B", "张三C",
                "周五", "李四", "赵本三");

        list1.stream().forEach(System.out::println);

        // count 统计
        Long num = list1.stream().count();
        System.out.println(num);

        // toArray 收集变成数组
        String[] str = list1.stream().toArray(value -> new String[value]);
        System.out.println(Arrays.toString(str));

二、Stream的常见方法

1、filter 过滤,limit获取前几个元素,skip跳过前几个元素

        
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "张无忌", "张三A", "张三B", "张三C",
                "周五", "李四", "赵本三");

        // 需求:张开头,最大数量为3,跳过第一个,打印
        list1.stream()
                .filter(s -> s.startsWith("张")) //张开头
                .limit(3) // 最大数量为3
                .skip(1) //跳过第一个
                .forEach(System.out::println);

        /*
            结果:
            张三A
            张三B
        */

2、map 转化流转的两种数据类型

        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "张无忌-1", "张三A-2",
                "张三B-3", "张三C-4",
                "周五-5", "李四-6", "赵本三-7");

        System.out.println(list1);
        // 字符串转为整型
        list1.stream()
                .map(s -> Integer.parseInt(s.split("-")[1]))
                .forEach(s-> System.out.print(s + " "));

3、distinct去重

ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "张无忌", "张无忌", "张无忌", "张三C",
                "周五", "李四", "赵本三");

        list1.stream().distinct().forEach(System.out::println);

4、concat 合并两个流

ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1, "a","b","c");
        ArrayList<String> list2 = new ArrayList<>();
        Collections.addAll(list2, "d","e","f");

        Stream.concat(list1.stream(),list2.stream()).forEach(System.out::println);

 三、Stream的收集

        使用Java的Stream API对一个包含字母-性别-编号格式字符串的ArrayList进行处理:首先通过filter筛选出性别为“男”的元素,分别收集到ListSet中;然后通过toMap将每个字符串的字母作为键、编号作为值,收集到Map中,最终实现了对数据的分类和转换。

ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "A-男-01", "B-男-02", "C-男-03",
                "D-男-04", "E-女-05",
                "F-女-06", "G-男-07");

        // 需求一:用list把男生收集起来
        List<String> list1 = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(list1);

        // 需求二:用set把男生收集起来
        Set<String> list2 = list.stream()
                .filter(s -> "男".equals(s.split("-")[1]))
                .collect(Collectors.toSet());
        System.out.println(list2);

        // 需求三:用map收集所有信息,字母对应编号
        // ps:map收集不能有两个键相同
        Map<String, Integer> map = list.stream()
                .collect(
                        Collectors.toMap(
                                s -> s.split("-")[0],
                                s -> Integer.parseInt(s.split("-")[2])
                        )
                );
        System.out.println(map);


http://www.kler.cn/a/526896.html

相关文章:

  • 01-时间与管理
  • 【16届蓝桥杯寒假刷题营】第2期DAY4
  • JxBrowser 7.41.7 版本发布啦!
  • ChatGPT与GPT的区别与联系
  • Kafka 消费端反复 Rebalance: `Attempt to heartbeat failed since group is rebalancing`
  • 白嫖DeepSeek:一分钟完成本地部署AI
  • Redis入门概述
  • 嵌入式知识点总结 Linux驱动 (七)-Linux驱动常用函数 uboot命令 bootcmd bootargs get_part env_get
  • 计算机图形学 通过叉乘判断一个点是否在三角形内
  • Java进阶six junit单元测试,反射,注解,动态代理
  • OVS-DPDK
  • 具身智能体空间感知基础!ROBOSPATIAL:评测并增强2D和3D视觉语言模型空间理解水平
  • 低代码产品表单渲染架构
  • 【计算机网络】设备更换地区后无法访问云服务器问题
  • 【华为OD-E卷 - 数组二叉树 100分(python、java、c++、js、c)】
  • Mybatis框架中的foreach标签解析
  • 【4Day创客实践入门教程】Day2 探秘微控制器——单片机与MicroPython初步
  • SQL进阶实战技巧:如何分析浏览到下单各步骤转化率及流失用户数?
  • 【C++语言】卡码网语言基础课系列----7. 摆平积木
  • Learning Vue 读书笔记 Chapter 4
  • DDD - 领域事件_解耦微服务的关键
  • char和varchar的区别、varchar(?)中问号部分的含义、索引的作用
  • 使用Pygame制作“俄罗斯方块”游戏
  • Spring Boot项目如何使用MyBatis实现分页查询及其相关原理
  • AJAX案例——图片上传个人信息操作
  • C++中vector追加vector