Java Stream流

Java Stream流(详解) 一、Stream流引入 Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库既有的鼻端。(Lambda表达式详解在上篇博客内容) 现有一个需求: 将list集合中姓张的元素过滤到一个新的集合中 然后将过滤出来的姓张的元素中,再过滤出来长度为3的元素,存储到一个新的集合中 1.用常规方法解决需求 /... 阅读详情

1.作用:是java8中处理集合的关键抽象概念,将集合中的数据变成另一种流的形式,可以对集合进行复杂的操作。Stream(流) 类用于来简化集合类的使用,Stream 本质上是个接口,接口中定义了很多对 Stream 对象的操作;

2.获取Strean流对象:

可以根据集合获取流对象

Collection集合:

default Stream<E> stream(); 返回的是一个有顺序的 和集合源数据相关的对象

2.11.根据list集合获取流对象

package com.wl.a_stream;
import java.util.ArrayList;
import java.util.List;
//根据list集合获取流对象
public class Demo03 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("牛彩云");
        list.add("荆二条");
        list.add("荆二条");
        list.add("荆二胖");
        list.stream().forEach((name)-> System.out.println(name));
    }
}

2.2根据set集合获取流对象

package com.wl.a_stream;
import java.util.HashSet;
import java.util.Set;
//根据set集合获取流对象
public class Demo04 {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("牛彩云");
        set.add("荆二条");
        set.add("荆二条");
        set.add("荆二胖");
        set.stream().forEach((name)-> System.out.println(name));
    }
}

2.3根据map集合获取对象

package com.wl.a_stream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
public class Demo05 {
    public static void main(String[] args) {
        Map<String , String> map = new HashMap<>();
        map.put("1","啤酒鸭");
        map.put("2","烤全鸭");
        map.put("3","脆皮鸭");
        //map集合没有stream方法,转为集合再来操作
        Set<String> strings = map.keySet();//获取键放到set集合中
        Stream<String> stream = strings.stream();//将set集合中的键变成流
        Collection<String> values = map.values();//获取值放到Collection集合中
        Stream<String> stream1 = values.stream();//将获取的值转为流

        Set<Map.Entry<String, String>> entries = map.entrySet();//将获取的键值对放到集合中
        Stream<Map.Entry<String, String>> stream2 = entries.stream();//将获取的键值对集合转为stream流

    }
}

2.4数组

String[] arr = {"依依" , "思思" , "毵毵"};
Stream<String> arr1 = Stream.of(arr);
arr1.forEach((name)-> System.out.println(name));

3.Stream流对象下面的方法

方法名字方法作用方法种类是否支持链式操作
count统计个数终结方法否
forEach遍历数据的终结方法否
filter过滤数据可以拼接是
limit取前几个数据可以拼接是
skip跳过前几个可以拼接是
map映射方法可以拼接是
concat拼接可以拼接是

4. count 和 forEach

count: 统计流中的个数,返回值是long类型的数据

forEach : 遍历流中的数据

package com.wl.b_stream;
import java.util.ArrayList;
public class Demo01 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("胡歌");
        arr.add("李逍遥");
        arr.add("宇文拓");
        arr.add("古月胡");
        //链式操作 count()统计流中的个数
        long count = arr.stream().count();
        System.out.println(count);//4
        System.out.println(arr.stream().count());//4
        //forEach遍历流中的数据
        arr.stream().forEach((name)-> System.out.println(name));
    }
}

4.1filter方法

Stream<T> filter(Predicate<? super T> predicate)

返回由于此给定谓词匹配的此流的元素组成的流

package com.wl.b_stream;

import java.util.ArrayList;
//filter方法 过滤
public class Demo02 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("胡歌");
        arr.add("李逍遥");
        arr.add("李遥");
        arr.add("宇文拓");
        arr.add("古月胡");
        arr.stream().filter((name)->name.startsWith("李")).
                filter((name)->name.endsWith("遥")).forEach((name)-> System.out.println(name));
    }
}

4.2limit方法

限制输出

package com.wl.b_stream;
import java.util.ArrayList;
//limit方法 限制输出
public class Demo03 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("胡歌");
        arr.add("李逍遥");
        arr.add("李遥");
        arr.add("宇文遥");
        arr.add("古月遥");
        arr.add("古遥");
        arr.add("月遥");
        arr.add("古遥遥");
        arr.stream().limit(4).filter((name)->name.
                endsWith("遥")).forEach((name)-> System.out.println(name));
    }
}

4.3map方法

处理映射关系

package com.wl.b_stream;
//map方法 处理映射关系
import java.util.ArrayList;
import java.util.function.Function;
public class Demo04 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("12");
        arr.add("13");
        arr.add("14");
        arr.add("15");
        arr.add("16");
       /* //将字符串数值转为int数据类型
        for (String s : arr) {
            int i = Integer.parseInt(s);
            System.out.println(i);
        }*/
        arr.stream().map(new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                int i = Integer.parseInt(s);
                return i;
            }
            //.parseInt() 转int数据的方法
        }).forEach((Integer s)-> System.out.println(s));
        System.out.println("==============");
        //链式
        arr.stream().map((name)->Integer.parseInt(name)).
                forEach((name)-> System.out.println(name));
    }
}

4.4skip方法

跳过前几个值

import java.util.ArrayList;
//skip方法
public class Demo05 {
    public static void main(String[] args) {
        ArrayList<String> arr2 = new ArrayList<>();
        arr2.add("胡歌");
        arr2.add("李逍遥");
        arr2.add("李遥");
        arr2.add("宇文遥");
        arr2.add("古月遥");
        arr2.add("古遥");
        arr2.add("月遥");
        arr2.stream().skip(4).filter((name)->name.endsWith("遥")).
                forEach((name)-> System.out.println(name));
    }
}

4.5concat合并两个流

package com.wl.b_stream;
import java.util.ArrayList;
import java.util.stream.Stream;
// concat合并两个流
public class Demo06 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("12");
        arr.add("13");
        arr.add("14");
        arr.add("15");
        arr.add("16");
        ArrayList<String> arr2 = new ArrayList<>();
        arr2.add("胡歌");
        arr2.add("李逍遥");
        arr2.add("李遥");
        arr2.add("宇文遥");
        //将两个集合转为stream流
        Stream<String> stream = arr.stream();
        Stream<String> stream1 = arr2.stream();
        //将两个流合并 concat  
        Stream<String> concat = Stream.concat(stream, stream1);
        //forEach 遍历打印
        concat.forEach((name)-> System.out.println(name));
    }
}

5.收集流

stream.collect(Collectors.toList())

stream.collect(Collectors.toSet())

toList(); 将流转为List集合

toSet(); 将流转为Set集合

因为真实的开发的时候,最终的结果还是集合 流只是扮演了中间处理数据的角色,中转站

package com.wl.b_stream;
import java.util.ArrayList;
import java.util.stream.Collectors;
public class Demo07 {
    public static void main(String[] args) {
        ArrayList<String> arr = new ArrayList<>();
        arr.add("胡歌");
        arr.add("李逍遥");
        arr.add("李遥");
        arr.add("宇文遥");
        arr.add("古月遥");
        arr.add("古遥");
        arr.add("古遥");
        arr.add("月遥");
        arr.add("古遥遥");
        arr.stream().skip(4).filter((name)->name.endsWith("遥")).
                collect(Collectors.toList()).forEach((name)-> System.out.println(name));
        System.out.println("==================");
        arr.stream().skip(4).filter((name)->name.endsWith("遥")).
                collect(Collectors.toSet()).forEach((name)-> System.out.println(name));
    }
}

练习:

package com.wl.zy_stream;
import java.util.ArrayList;
import java.util.stream.Stream;
/*现在有两个ArrayList集合,分别存储6名男演员名称和6名女演员名称,要求完成如下的操作:
        1:男演员只要名字为3个字的前三人
        2:女演员只要姓林的,并且不要第一个
        3:把过滤后的男演员姓名和女演员姓名合并到一起
        4:把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据
        https://yebd1h.smartapps.cn/pages/blog/index?blogId=117229163&_swebfr=1&_swebFromHost=baiduboxapp*/
class Actor{
    private String name;

    public Actor(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Actor{" +
                "name='" + name + '\'' +
                '}';
    }
}
public class Work01 {
    public static void main(String[] args) {
        //第一个ArrayList集合 存储6名男演员
        ArrayList<String> arr = new ArrayList<>();
        arr.add("胡歌");
        arr.add("隋炀帝");
        arr.add("秦始皇");
        arr.add("倪大红");
        arr.add("张凯");
        arr.add("霍建华");
        //第二个ArrayList集合 存储6名女演员
        ArrayList<String> arr1 = new ArrayList<>();
        arr1.add("刘亦菲");
        arr1.add("林黛玉");
        arr1.add("林心如");
        arr1.add("李知恩");
        arr1.add("黄荣");
        arr1.add("林允儿");
        //1.男演员只要名字为3个字的前三人
        Stream<String> manStr = arr.stream().filter((name)->name.length() == 3).
                limit(3);
      //  manStr.forEach((name)-> System.out.println(name));
        System.out.println("================");
        //2.女演员只要姓林的,并且不要第一个
        Stream<String> womanStr = arr1.stream().filter((name1)->name1.startsWith("林")).
                skip(1);
       // womanStr.forEach((name)-> System.out.println(name));
        System.out.println("==============");
        //3:把过滤后的男演员姓名和女演员姓名合并到一起
        Stream<String> stream = Stream.concat(manStr, womanStr);
        //stream.forEach(System.out::println);//==> stream.forEach((name)-> System.out.println(name));
        //4:把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据
        //想输出 需要把上面的 终结方法注释掉(forEach等)
        stream.map(Actor::new).forEach(System.out::println);

    }
}

【Java】stream流 stream流可以通过简单的方式去处理一个数据集合,而不用通过冗杂的循环遍历Stream中的元素是以Optional类型存在的optional 允许元素为空。 阅读详情

相关推荐

Java:Stream流

Java:Stream流

游手好闲 1675

Java集合——聚合操作(Stream流)

Stream接口,JDK8新增接口,该接口,并结合Lambda表达式的优势进一步简化集合、数组中元素的查找、过滤、转换等操作,这一新功能叫做聚合操作。

清晨的博客 5734

Java——Stream流

Stream流

m0_72786443的博客 1572

Stream流使用,收集成一个List或者Set集合,可以代替for循环使用

文章目录1.Stream流是什么?2. stream流的创建方式?2.1通过集合直接创建2.2通过数组直接创建2.3通过Stream.of创建3. Stream对数据进行操作3.1 (filter,skip,limit,distinct)筛选和切片(方法直接可以通过链式编程写出)3.2 map映射3.3 进行排序3.4 (allmatch,noneMatch,findAny,filter)匹配查找3.5 (reduce)归约3.6 (collect) 收集,可以为Set(无序,去除重复),List(有序,有

有时间可以指导毕业设计,可以私聊我。一个热爱编程的smallCuteMonkey,可以私信我 8794

【第一篇】Xshell连接服务器部署前后端项目(连接服务器)

利用Xshell连接服务器部署前后端项目

blog 1073

五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器

本系列文章主要介绍如何在工程实践中使用卡尔曼滤波器,分五个小节介绍: 一.卡尔曼滤波器开发实践之一: 五大公式 二.卡尔曼滤波器开发实践之二: 一个简单的位置估计卡尔曼滤波器 三.卡尔曼滤波器(EKF)开发实践之三: 基于三个传感器的海拔高度数据融合 四.卡尔曼滤波器(EKF)开发实践之四: ROS系统位姿估计包robot_pose_ekf详解 五.卡尔曼滤波器(EKF)开发实践之五: 编写自己的EKF替换robot_pose_ekf中EKF滤波器 也就是本文 ...

okgwf的博客 4138

Java8的Stream流详解

首先,Stream流有一些特性: Stream流不是一种数据结构,不保存数据,它只是在原数据集上定义了一组操作。 这些操作是惰性的,即每当访问到流中的一个元素,才会在此元素上执行这一系列操作。 Stream不保存数据,故每个Stream流只能使用一次。 关于应用在Stream流上的操作,可以分成两种:Intermediate(中间操作)和Terminal(终止操作)。中间操作的返回结果都是...

长风 6万+

fastjson1.2.83反序列化漏洞

【代码】fastjson1.2.83反序列化漏洞。

Coder的博客 1万+

Java - Stream流详解

Stream流是Java 8中的一个新特性,它提供了一种处理集合和数组的方式。Stream流可以让我们以一种更加简洁、高效、可读性更强的方式来处理数据。Stream流可以用于过滤、映射、排序、聚合等操作,它可以让我们避免使用循环和条件语句来处理数据,从而让代码更加简洁易懂。Stream流的操作可以分为中间操作和终止操作两种类型,中间操作返回的是一个新的Stream流,终止操作返回的是一个非Stream类型的结果。Stream流的处理是惰性求值的,只有在执行终止操作时才会开始处理数据。

weixin_73869209的博客 2万+

Ghidra逆向分析实战:从安装JDK到解析STM32的bin文件(附SVD插件配置)

本文详细介绍了使用Ghidra进行STM32固件逆向分析的完整流程,从JDK安装配置到SVD插件的应用。通过实战案例展示如何解析bin文件、恢复符号信息以及利用SVD插件识别外设寄存器,帮助开发者高效完成嵌入式设备的逆向工程任务。

weixin_29309475的博客 644

关于mos管的压降问题(项目遇到问题总结)

在研发过程中没有出现问题的板子,到了小批时竟出现雷达一直在触发???找了大几天,没有头绪。心中疑惑颇多,加上老板催促,自考等原因,真是压力山大。4月份自考,只有差不多一个月时间了吧,没有什么大的收获,反而在查找硬件问题的过程中,发现了一个自己忽视的一个问题,就是关于Mos管的压降问题。 备考的过程崎岖不平,工作又问题多多,孰轻孰重,如何取舍?从心理来说,不想取舍什么,只是有所得就可以,过不了就过不了呗,已经毕业十五年了,没这个本科文凭不也过来了吗?只是代表了自己在这一段时间的思考,自己兴趣吧,没什么大不了

guangod的博客 2万+

Java的Stream流

是专业用于对集合或者数组进行便捷操作的

weixin_50921885的博客 1263

拆开一个烧坏的IGBT模块,手把手教你识别过压、过流、过温的“案发现场”

本文详细解析了IGBT模块失效分析的实战技巧,通过观察铝层熔化纹路、焊锡溢出形态等物理痕迹,手把手教你识别过压、过流、过温的典型失效模式。文章提供了从基础工具包到现场快速诊断的完整流程,帮助工程师精准定位IGBT模块失效的根本原因。

weixin_30655569的博客 424

【Java笔记】Stream流 超详解

如果巅峰留不住,那就进厂包吃住。如果志同道也合,那就流水线回合。

小新的博客 6362

《UDS协议从入门到精通(UDS速查手册)》(完结撒花版)

专栏总目录,文中介绍了UDS协议相关的基础知识和一些术语,给出了详细介绍6大类26种服务的跳转目录。

车载系统攻城狮 9万+

基于STM32L4XX、HAL库的BQ25713RSNR充电芯片驱动程序设计

define BQ25713_I2C_ADDR (0x6B << 1) // 7位地址为 0x6B,HAL库需要左移一位。// 示例:配置 CHARGE_OPTION_0 寄存器:使能充电,使能 ICO(输入电流优化)reg_data |= (EN_CHG_MASK | EN_ICO_MASK);

zhusl6688的博客 406

Java—Stream流

本文详细介绍了JAVA中有关Stream的相关内容。

向上的咸鱼blueblue的博客 1784

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java Stream流以及常用方法详解

Stream基本方法以及常用方法介绍

愿你我都能实现自己的梦想 5748

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java Stream流详解

Stream流是Java 8引入的一种处理数据集合的API,它允许以声明式方式处理数据集合,让开发者能够写出更加简洁、高效的代码。Stream流的设计初衷是提供一种函数式编程的方式来处理集合,使代码更具可读性,并可以利用多核架构实现并行操作。Stream流不是一种数据结构,它只是数据源的一个视图,不会存储数据,也不会修改源数据。通常,Stream流的操作是延迟执行的,这意味着它们直到需要结果时才会计算。

yk_dflkg的博客 2420

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java Stream 流的使用

在实际生产中,几乎很少使用for循环的结构进行操作,Java 8 提供的Stream可以大大提高程序员的生产力,由于自己之前对于Stream 流使用的并不是很熟练,所以在这里进行简单的总结归纳。 最后熟练的使用Stream流,不仅仅是对基础的熟悉,还是需要对于业务的一些理解需要比较深刻。

m0_46335449的博客 1125

Java中的Stream流

Java中Stream流用法; 主要是方便API使用等

qq_57689612的博客 4323

Java中Stream流的使用

在 Java 中,Stream 流是 Java 8 引入的一个强大特性,它允许你以声明式的方式处理集合数据。Stream 流提供了一种高效且易于使用的方式来对数据进行过滤、映射、排序、聚合等操作,使代码更加简洁和可读。

2303_78892316的博客 1589

【Stream流】Java中的“Stream流”

Stream流 是Java 8引入的一个概念,它并不是数据的存储结构,而是数据的处理方式。简单来说,Stream 提供了一种高级的 API 来处理集合中的元素,允许你通过链式调用来进行过滤、映射、排序、聚合等操作。与传统的迭代方式相比,Stream 更加简洁、灵活,并且支持并行处理。

slj18633752884的博客 883

【Java学习】Stream流详解

Stream流是JDK 8引入的一个概念,它提供了一种高效且表达力强的方式来处理数据集合(如List、Set等)或数组。Stream API可以以声明性方式(指定做什么)来处理数据序列。流操作可以被分为两大类:中间操作(Intermediate Operations)和终端操作(Terminal Operations)。

2202_76097976的博客 2380

Java基础_Stream流

Java基础_Stream流

Y_cen的博客 1289
上一篇: 反射及通过发射获取方法和属性
下一篇: Java基本数据类型 包装类
Java_dacainiao
博客等级 码龄4年 1粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值