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

Stream流

流:就像流水线一样

先得到一条Stream流,并把数据放上去

利用Api进行各种操作

分为中间方法和终结方法

单列集合

        //1.单列集合获取Stream流
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list, "a", "b", "v");

        //获取到一条流水线,并把集合中的数据放到流水线上
/*        Stream<String> stream1 = list.stream();
        //使用终结方法打印所有数据
*//*        stream1.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });*//*
         */
        list.stream().forEach(s -> System.out.println(s));
        

双列集合

//双列集合,不能直接使用stream

//1.创建双列集合
HashMap<String, Integer> hm = new HashMap<>();
hm.put("a", 1);
hm.put("b", 2);
hm.put("c", 3);
hm.put("d", 4);
hm.put("e", 5);

//2.第一zhong获取stream
hm.keySet().stream().forEach(s -> System.out.println(s));

//3.第二种获取
hm.entrySet().stream().forEach(s -> System.out.println(s));

数组

//数组
//1.创建数组
int[] arr = {1, 2, 3, 4, 5};

//2.获取stream流
Arrays.stream(arr).forEach(s -> System.out.println(s));

零散数据

//一堆零三数据

Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));

中间方法

中间方法,返回新的stream流,原来的stream只能使用一次,建议使用链式编程

修改stream流中的数据,不会影响本身的

过滤

ArrayList<String> list=new ArrayList<>();
Collections.addAll(list,"aaa,","aaaa","bbb","aab");

//filter过滤
list.stream().filter(new Predicate<String>() {
    @Override
    public boolean test(String s) {
        //如果返回值为true,留下
        s.startsWith("a");
        return s.startsWith("a");
    }
}).forEach(s-> System.out.println(s));

//链式编程

list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s ));

获取,跳过

/*
 * limit 获取前几个元素
 * skip  跳过前几个元素
 *
 * */

list.stream().limit(3)
        .forEach(s -> System.out.println(s));

list.stream().skip(4)
        .forEach(s -> System.out.println(s));

去重 合并

/*
 *
 * distinct  元素去重,依赖于哈市Code和equals方法
 *
 * concat       合并a,b为一个流
 *

 * */

ArrayList<String> list1=new ArrayList<>();
Collections.addAll(list1,"aaaa","ab","aaaaaa","bbbbbb","ccccccccc","abccc","aaaa","ab");

ArrayList<String> list2=new ArrayList<>();
Collections.addAll(list2,"bbbb","cccc");

list1.stream().distinct().forEach(s-> System.out.println(s));

Stream.concat(list1.stream(),list2.stream()).forEach(s-> System.out.println(s));

类型转换

/*
 * map   转换流中的数据类型
 * */

ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "lbx-18", "zjy-18");

//只获取里面的年龄并打印
//String->int

//方法内部的s表示流里的每一个数据
//return 表示转换以后的数据

list.stream().map(new Function<String, Integer>() {
    @Override
    public Integer apply(String s) {
        String[] split = s.split("-");
        return Integer.parseInt(split[1]);
    }
}).forEach(s-> System.out.println(s));
System.out.println("=======================");
list.stream().map(s->Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));

终结方法

遍历

/*
 * 泛型:流中数据的类型
 * 形参s 以此表示流的每一个数据
 *
 *
 * */
list1.stream().forEach(new Consumer<String>() {
    @Override
    public void accept(String s) {
        System.out.println(s);
    }
});


list1.stream().forEach(s -> System.out.println(s));

统计

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

收集

收集到数组

        /*
        * 泛型:是一个具体类型的数组
        * apply中的形参:流中数据的个数,要跟数组的长度保持一致
        * 返回值:具体类型的数组
        * */

        //toArray方法的参数的作用:创建一个指定类型的数组
        //底层:会依次得到流李的每一个元素,并把数据存到数组当中
        //toArray方法的返回值:是一个装着流里面所有数据的数组
/*        String[] arr= list1.stream().toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];
            }
        });
        System.out.println(Arrays.toString(arr));*/

        String[] arr2 = list1.stream().toArray(value -> new String[value]);
        System.out.println(Arrays.toString(arr2));
    }

收集到集合

//收集到map
//收集所有男性
//确认键为姓名,值为年龄

Map<String, Integer> newMap = list.stream()
        .filter(s -> "男".equals(s.split("-")[1]))
        /*
         * toMap:两个参数
         * 参数1:键的生成规则
         * 参数2:值的生成规则
         * 参数一:
         *       Function泛型一:表示流中每一个数据的类型
         *               泛型二:表示Map集合中键的数据类型
         *       方法apply形参:表示流李每一个数据
         *               方法体:生成键的代码
         *
         *
         * 参数二:
         *      Function泛型一:表示流中每一个数据的类型
         *               泛型二:表示Map集合中值的数据类型
         *                   方法apply形参:生成值的代码
         *               方法体:已经生成的值
         *
         * 注意点:键不能重复!!
         * */
        .collect(Collectors.toMap(new Function<String, String>() {
            @Override
            public String apply(String s) {
                return s.split("-")[0];
            }
        }, new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return Integer.parseInt(s.split("-")[2]);
            }
        }));
System.out.println(newMap);
Map<String, Integer> Map = list.stream()
        .filter(s -> "男".equals(s.split("-")[1]))
        .collect(Collectors.toMap(
                s -> s.split("-")[0],
                s -> Integer.parseInt(s.split("-")[2])
        ));
System.out.println(Map);

相关文章:

  • AI与Prompt:解锁软件开发团队的魔法咒语,在复杂任务上生成正确率更高的代码
  • 部署vuepress项目到githubPage
  • Android S从桌面点击图标启动APP流程 (五)
  • 通用管理后台项目笔记 - Vue3+Vite安装环境、封装路由
  • el-input输入内容类型为大于0的数字
  • 安防视频监控平台EasyCVR前端解码与后端解码的区别介绍
  • 【MySql】10- 实践篇(八)
  • 几个常用的nosql数据库的操作方式
  • 模块化时代的必备工具:Webpack详解,为你的项目注入新活力
  • 浅谈Vue3——如何使用Push
  • 将字符串中符合规则的元素替换为指定元素 re.sub()
  • 如何在用pip配置文件设置HTTP爬虫IP
  • 初学编程入门基础教学视频,中文编程开发语言工具箱之豪华编辑构件,免费版中文编程软件下载
  • Bootstrap知识点目录
  • 【Java笔试强训】Day7(WY22 Fibonacci数列、CM46 合法括号序列判断)
  • 软考网工历年简答题汇总(2016下半年~2023年上半年)
  • 在excel中如何打出上标、下标
  • 算法刷题-栈与队列
  • python赋值运算符,及查询表
  • 大数据笔记-关于Cassandra的删除问题
  • 一个商务宣传怎么做网站合适/中国网站排名前100
  • 淘宝有做钓鱼网站的吗/优化外包服务公司
  • css用代码做网站/湖南seo服务
  • 网站建设字体颜色代码/关键词搜索数据
  • 网站怎么才能被百度收录/seo外包 靠谱
  • 网站制作定制18/网店代运营合同