Stream流的中间方法

一.Stream流的中间方法

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

注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据

二.filter

filter的主要用法是过滤,挑选出满足条件的元素

java 复制代码
package com.njau.d10_my_stream;

import java.util.ArrayList;
import java.util.Collections;

public class StreamDemo6 {
    public static void main(String[] args) {
        /*
            filter              过滤
            limit               获取前几个元素
            skip                跳过前几个元素

            注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
            注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据
         */
        //filter    过滤      把张开头的留下,其余的过滤不要
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");
        /*
        list.stream().filter(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                // 返回值为true。则表示当前数据留下
                // 返回值为false。则表示当前数据舍弃不要
                return s.startsWith("张");
            }
        }).forEach(s -> System.out.println(s));
        */

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

        // 只能用一次,已经在上面用过了
//        stream1.forEach(s -> System.out.println(s));

        System.out.println(list);
    }
}

三.limit和skip

limit:获取前几个元素

skip:跳过前几个元素

java 复制代码
package com.njau.d10_my_stream;

import java.util.ArrayList;
import java.util.Collections;

public class StreamDemo6 {
    public static void main(String[] args) {
        /*
            filter              过滤
            limit               获取前几个元素
            skip                跳过前几个元素

            注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
            注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据
         */
        //filter    过滤      把张开头的留下,其余的过滤不要
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤");
        // limit               获取前几个元素
        // skip                跳过前几个元素
        list.stream().limit(3)
                .forEach(s -> System.out.println(s));

        System.out.println("=================================================");

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

        System.out.println("=================================================");
        // 课堂练习:
        // 获取:"张强,"张三丰","张翠山"
        // 方法1
        list.stream().skip(3)
                .limit(3)
                .forEach(s -> System.out.println(s));
        System.out.println("=================================================");
        // 方法2
        list.stream().
                limit(6).
                skip(3).
                forEach(s -> System.out.println(s));
    }
}

四.distinct

对于集合中的元素进行去重,如果集合使用的是HashSet集合,要进行hashCode和equals方法的重写

java 复制代码
package com.njau.d10_my_stream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;

public class StreamDemo7 {
    public static void main(String[] args) {
        /*
            distinct    元素去重,依赖(hashCode和equals方法)
            concat      合并a和b两个流为一个流,如果两个流中的数据类型不一致,那么会使用两个数据类型共同的父类数据类型

            注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
            注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据
        */
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌","周芷若","赵敏","张强","张三丰","张翠山","张良","王二麻子","谢广坤","张三丰","张三丰");

        // distinct     元素去重,依赖(hashCode和equals方法)
        list.stream().
                distinct().
                forEach(s -> System.out.println(s));
        System.out.println("==================================");
    }
}

五.concat

将两个流合并成为一个流,如果两个流的数据类型不同,那么就使用这两个流的数据类型的公共父类数据类型

java 复制代码
package com.njau.d10_my_stream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;

public class StreamDemo7 {
    public static void main(String[] args) {
        /*
            distinct    元素去重,依赖(hashCode和equals方法)
            concat      合并a和b两个流为一个流,如果两个流中的数据类型不一致,那么会使用两个数据类型共同的父类数据类型

            注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
            注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据
        */
        // concat      合并a和b两个流为一个流,如果两个流中的数据类型不一致,那么会使用两个数据类型共同的父类数据类型
        ArrayList<String> list1 = new ArrayList<>();
        Collections.addAll(list1,"张无忌","周芷若","赵敏","张强","张三丰","张翠山");

        ArrayList<String> list2 = new ArrayList<>();
        Collections.addAll(list2,"张良","王二麻子","谢广坤");

        Stream<String> stream1 = list1.stream();
        Stream<String> stream2 = list2.stream();
        Stream<String> stream3 = Stream.concat(stream1, stream2);
        stream3.forEach(s -> System.out.println(s));
    }
}

六.map

map用于转换流中的数据类型为别的数据类型

java 复制代码
package com.njau.d10_my_stream;

import java.util.ArrayList;
import java.util.Collections;
import java.util.function.Function;


/**
 *  map     转换流中的数据类型
 *  注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
 *  注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据
 */
public class StreamDemo8 {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌-15","周芷若-14","赵敏-13","张强-20","张三丰-100","张翠山-40","张良-35","王二麻子-37","谢广坤-50");

        // Function函数参数1:原来的数据类型  参数2:要转换的数据类型
        list.stream().map(new Function<String, Integer>() {
            // s:原来的数据
            @Override
            public Integer apply(String s) {
                String[] arr = s.split("-");
                String s1 = arr[1];
                int i = Integer.parseInt(s1);
                return i;
            }
        }).forEach(s -> System.out.println(s));

        System.out.println("=====================================");

        list.stream().map(s -> Integer.parseInt(s.split("-")[1])).forEach(s -> System.out.println(s));
    }
}
相关推荐
带刺的坐椅9 小时前
用 ChatModel 构建 LLM 驱动的 Java 应用
java·ai·llm·solon·rag·chatmodel
TrisighT11 小时前
Electron 跑鸿蒙 PC 上,这 4 个 API 的行为跟 Windows 完全不一样——但文档一行都没写
windows·electron·harmonyos
用户37215742613511 小时前
Java 将 Word 文档转换为 Markdown:基础转换与导出选项详解
java
行者全栈架构师11 小时前
PolarDB + Spring Boot 实战:从自建MySQL到云原生数据库的零停机迁移
java·后端·架构
karry_k1 天前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k1 天前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
SamDeepThinking1 天前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩1 天前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码1 天前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python