java的Stream流

一、遍历与统计

java 复制代码
  // 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跳过前几个元素

java 复制代码
        
        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 转化流转的两种数据类型

java 复制代码
        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去重

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

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

4、concat 合并两个流

java 复制代码
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中,最终实现了对数据的分类和转换。

java 复制代码
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);
相关推荐
虚!!!看代码几秒前
【JVM-GC调优】
java·开发语言·jvm
yuanyxh2 分钟前
commonmark.js 源码阅读(一) - Block Parser
开发语言·前端·javascript
轮到我狗叫了12 分钟前
力扣智慧思想小题,目录力扣.跳跃游戏(思想很重要)力扣.跳跃游戏II(还是思想)力扣.分发糖果力扣151.反转字符串中的单词力扣.轮转数组
数据结构·算法·leetcode
小白的代码日记19 分钟前
java-反射精讲
java·开发语言
进取星辰21 分钟前
22、城堡防御工事——React 19 错误边界与监控
开发语言·前端·javascript
zxctsclrjjjcph21 分钟前
【递归、搜索和回溯】递归、搜索和回溯介绍及递归类算法例题
开发语言·c++·算法·力扣
MaCa .BaKa30 分钟前
37-智慧医疗服务平台(在线接诊/问诊)
java·vue.js·spring boot·tomcat·vue·maven
碎梦归途38 分钟前
23种设计模式-行为型模式之模板方法模式(Java版本)
java·开发语言·jvm·设计模式·软考·模板方法模式·软件设计师
八股文领域大手子1 小时前
Spring Boot Controller 如何处理HTTP请求体
java·开发语言·sql·spring·spring cloud
tanxiaomi1 小时前
Java中对象集合转换的优雅实现【实体属性范围缩小为vo】:ListUtil.convert方法详解
java·spring boot·mybatis