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));
    }
}
相关推荐
这周也會开心1 分钟前
云服务器安装JDK、Tomcat、MySQL
java·服务器·tomcat
hrrrrb1 小时前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 小时前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
sdgsdgdsgc1 小时前
Next.js企业级应用开发:SSR、ISR与性能监控方案
开发语言·前端·javascript
周杰伦_Jay2 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
rit84324995 小时前
基于MATLAB的模糊图像复原
开发语言·matlab
fie88895 小时前
基于MATLAB的声呐图像特征提取与显示
开发语言·人工智能
程序员小凯5 小时前
Spring Boot测试框架详解
java·spring boot·后端
路由侠内网穿透5 小时前
本地部署开源持续集成和持续部署系统 Woodpecker CI 并实现外部访问
服务器·网络·windows·ci/cd·开源
豐儀麟阁贵6 小时前
基本数据类型
java·算法