Stream-JDK8

Stream概念 

代码示例 

package com.zz.stream;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;/*** 使用Stream流* 找出姓张并且是三个字的名字*/
public class Test {public static void main(String args[]){List<String> names = new ArrayList <>();Collections.addAll(names, "张无忌", "赵四", "张三", "李四", "张缘结");System.out.println(names);//使用原始方法List<String> list = new ArrayList <>();for (String name:names) {if(name.startsWith("张") && name.length() == 3){list.add(name);}}System.out.println(list);//使用Stream流List<String> list1 = names.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).collect(Collectors.toList());System.out.println(list1);}
}
  1. names.stream(): 这部分将names列表转换成一个流(Stream)。流是Java 8中引入的一个新特性,它允许你以声明性方式处理数据集合(如列表、集合等)。

  2. filter(s -> s.startsWith("张")): 第一个filter方法用于过滤流中的元素。它接受一个Predicate(谓词),该谓词是一个函数式接口,用于定义一个测试条件。在这里,谓词是一个lambda表达式s -> s.startsWith("张"),它检查每个字符串是否以“张”开头。只有满足这个条件的字符串才会被保留在流中。

  3. filter(s -> s.length() == 3): 第二个filter方法再次过滤流中的元素。它使用了另一个lambda表达式s -> s.length() == 3作为谓词,该谓词检查每个字符串的长度是否为3。只有长度为3的字符串才会被保留在流中。

需要注意的是,这里连续调用了两次filter方法。流中的每个元素首先会经过第一个filter方法的检查,然后再经过第二个filter方法的检查。只有同时满足这两个条件的元素才会被保留。

  1. collect(Collectors.toList()): 最后,collect方法用于将过滤后的流收集到一个新的列表中。Collectors.toList()是一个收集器(Collector),它告诉collect方法如何收集流中的元素。在这个例子中,它将流中的元素收集到一个新的List中。

Stream流的使用步骤 

1.获取Stream流

  1.  List集合获取Stream流
  2. Map集合获取Stream流
  3. Set集合获取Stream流
  4. 数组获取Stream流

代码示例

package com.zz.stream;import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Test2 {public static void main(String args[]){//1.集合获取Stream流List<String> names = new ArrayList <>();Collections.addAll(names, "刘德华", "朱子晴", "朱德", "郭富城");List<String> list = names.stream().filter(s -> s.contains("德")).collect(Collectors.toList());System.out.println(list);//2.Set集合获取Stream流Set<String> set = new HashSet <>();Collections.addAll(set, "刘德华", "朱子晴", "朱德", "郭富城");Stream<String> stream = set.stream();stream.filter(s -> s.contains("朱")).forEach(s -> System.out.println(s));//使用Map集合获取Stream流Map<String, Double> map = new HashMap <>();map.put("白骨精", 145.9);map.put("牛魔王", 180.3);map.put("孙悟空", 156.4);/*** Map集合不能直接获取Stream流* 解决方法* 1.通过Set<String> keys = map.keySet();获取键流*  Collection<Double> values = map.values();获取值流*  2.使用Entry封装键值对:Set<Map.Entry<String, Double>> entries = map.entrySet();*/Set<String> keys = map.keySet();Stream<String> ks = keys.stream();//获取到键的流Collection<Double> values = map.values();Stream<Double> vs = values.stream();Set<Map.Entry<String, Double>> entries = map.entrySet();Stream<Map.Entry<String, Double>> kvs = entries.stream();kvs.filter(e -> e.getKey().contains("牛")).forEach(s -> System.out.println(s.getKey() + "=" + s.getValue()));//数组获取Stream流String[] names2 = {"张护", "妞儿", "bab"};Stream<String> s1 = Arrays.stream(names2);Stream<String> s2 = Stream.of(names2);}
}

2.Stream常用的中间方法

 3.Stream流常见的终结方法

 

注意:流只能收集一次 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/536481.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sqllab第二关通关笔记

知识点整理&#xff1a; 数值型注入判断手法 1/1 1/0 回显不同错误注入函数 extractvalue(xml_flag,xpath) xml_flag&#xff1a;文件表示符xpath&#xff1a;文件路径&#xff1b;不能识别‘~’ ‘#’ 等特殊字符&#xff1b;遇到就报错并打印xpath内容~(十六进制表示)&#…

反爬虫技术:如何保护你的网站数据安全

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;而爬虫技术则成为了获取这些数据的重要手段之一。然而&#xff0c;对于网站运营者来说&#xff0c;非法爬虫不仅会导致数据泄露&#xff0c;还可能给网站带来巨大的流量压力和安全隐患。因此&#xff0c;本文将探讨如何…

【数据挖掘】实验2:R入门2

实验2&#xff1a;R入门2 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握R数据类型。 2&#xff1a;熟悉和掌握R语言的数据读写。 二&#xff1a;实验内容 1&#xff1a;R数据类型 【基本赋值】 Eg.1代码&#xff1a; x <- 8 x Eg.2代码&#xff1a; a city …

web作业说明

http的请求、响应过程是无状态的。会话状态的跟踪 &#xff08;1&#xff09;session cookie &#xff08;2&#xff09;token 校验的方式&#xff08;用户登陆成功之后&#xff0c;生成token&#xff0c;讲token响应到客户端去&#xff0c;客户端在本地存储中存储token&#…

RabbitMQ自学笔记——延迟消息

延迟消息&#xff1a;生产者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而是在指定时间之后才收到消息。 1.死信交换机 初始设定消息的过期时间为30s&#xff0c;由于simple.queue队列没有消费者&#xff0c;当消息到达过期时间&#xff0c;没人消…

大数据Doris(六十八):基于Doris on ES的架构实现总结

文章目录 基于Doris on ES的架构实现总结 一、Mem Join架构遗留的核心问题 二、Doris

【JavaScript】面试手撕柯里化函数

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 引入柯里化定义实现快速使用柯里化的作用提高自由度bind函数 参考资料 引入 上周…

linux环境下安装运行环境JDK、Docker、Maven、MySQL、RabbitMQ、Redis、nacos、Elasticsearch

安装JDK 1、提前下载好jdk 官网&#xff1a;点击下载 2、将下载的文件放到自己喜欢的目录下 然后使用下面命令进行解压 tar -zxvf jdk-8u161-linux-x64.tar.gz3、配置环境变量 使用命令 vim /etc/profile在文件的最后插入 export JAVA_HOME/source/java/jdk1.8.0_161 #…

ASP.NET排课实验室排课,生成班级课表实验室课表教师课表(vb.net)-214-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword214 要看成品演示 请联系客服发给您成品演示 课题&#xff1a;实验课排课系统 计算机 上机课 一周上5天课&#xff0c;周一到周五 一周上5天课&#xff0c;周一到周五 因为我排的是实验课&#xff0c;最好1&#xf…

基于vue实现bilibili网页

学校要求的实验设计,基于vue实现bilibili网页版,可实现以下功能 (1)基本的悬浮动画和页面渲染 (2)可实现登录和未登录的页面变化 (3)在登录页面的,实现密码判断,或者短信验证方式的倒数功能 (4)实现轮播图 (5)实现预览视频(GIF) (6)页面下拉到一定高度出现top栏以及右下角的返回…

一.java介绍和idea基础使用

java技术体系 Java技术体系说明Java SE(Java standard Edition):标准版Java技术的核心和基础Java EE(Java Enterprise Edition):企业版企业级应用开发的一套解决方案Java ME(Java Micro Edition):小型版针对移动设备应用的解决方案&#xff08;认可少&#xff0c;主要是安卓和…

idea Springboot 在线考试管理系统开发mysql数据库web结构java编程计算机网页

一、源码特点 springboot 在线考试管理系统是一套完善的完整信息系统&#xff0c;结合mvc框架和bootstrap完成本系统springboot spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有…