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

Stream流的中间方法

一.Stream流的中间方法 

注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
注意2:修改Stream流中的数据,不会影响原来集合或者数组中的数据 

二.filter

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

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:跳过前几个元素

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方法的重写

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

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

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用于转换流中的数据类型为别的数据类型

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));
    }
}


http://www.kler.cn/news/330614.html

相关文章:

  • 本地生活服务项目有哪些:如何利用本地生活市场,打开线下流量!
  • oracle 定时任务每月27号到月底
  • 信息安全工程师(13)网络攻击一般过程
  • 【分布式微服务云原生】Docker常用命令指南
  • 【预备理论知识——1】深度学习:概率论概述
  • Redis入门第五步:Redis持久化
  • 什么是“0day漏洞”?
  • 【leetcode】 45.跳跃游戏 ||
  • 如何快速自定义一个Spring Boot Starter!!
  • 更新-Python OS
  • 基于SpringCloud的微服务架构下安全开发运维准则
  • Linux -- 文件系统(文件在磁盘中的存储)
  • 滚雪球学Oracle[6.1讲]:高级特性与实战案例
  • JZ2440开发板——代码重定位
  • PHP反序列化8(phar反序列化)
  • Webstorm 中对 Node.js 后端项目进行断点调试
  • Leecode热题100-84.柱状图中的最大矩形
  • Go基础编程 - 15 - 延迟调用(defer)
  • Flume面试整理-Flume是什么?
  • 滚雪球学Oracle[5.1讲]:Oracle数据库管理与维护