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

4.7学习总结

java学习

一.Stream流

(一.)概念:

Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。Stream流是对集合(Collection)对象功能的增强,与Lambda表达式结合,可以提高编程效率、间接性和程序可读性。

特点:

  • stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
  • stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
  • stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

(二.)Stream的创建

1.Collection集合创建

List<Integer> integerList = new ArrayList<>();
Collection.addAll(integerList,1,2,3,4,5);        
Stream<Integer> listStream = integerList.stream();

2.Stream创建对象

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();  //串行流
Stream<String> parallelStream = list.parallelStream(); //并行流

3.Arrays数组创建

int[] Arr = {1, 2, 3, 4, 5};
IntStream arrayStream = Arrays.stream(Arr);

(三.)操作符

1.中间操作符

 中间操作会返回一个新的流,一个流可以后面跟随零个或多个中间操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后会返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。而是在终结操作开始的时候才真正开始执行。

public class stream4 {public static void main(String[] args) {//中间方法,返回新的steam流,原来的stream流只能使用一次//修改stream流中的数据,不会改变原来集合中的元素ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张三","张三疯","喜洋洋","美洋洋","柳如烟","李四");//1.filter 过滤作用list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//2.skip 跳过元素list.stream().skip(3).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//3.limit 获取前几个元素list.stream().limit(3).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//4.获取中间的两元素的方法://1.仙截取后跳过list.stream().limit(4).skip(2).forEach(s-> System.out.println(s));System.out.println("--------------------------------");//2.仙跳过后截取list.stream().skip(2).limit(2).forEach(s-> System.out.println(s));System.out.println("--------------------------------");}
}

 运行结果:

2.终结操作符

 终结操作是指返回最终的结果。一个流只能有一个终结操作,当这个操作执行后,这个流就被使用“光”了,无法再被操作。所以这必定这个流的最后一个操作只有终结操作执行的时候,才会真正开始流的遍历,并且会生成一个结果。

(四.)使用实例

要求将一组数据中,对大于一定年龄的人放入到map集合中,并进行输出

public class TEXT2 {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张三,12","李四,15","王五,16");//匿名内部类的写法Map<String, Integer> map = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 15).collect(Collectors.toMap(new Function<String, String>() {@Overridepublic String apply(String s) {return s.split(",")[0];}}, new Function<String, Integer>() {@Overridepublic Integer apply(String s) {return Integer.parseInt(s.split(",")[1]);}}));System.out.println(map);System.out.println("---------------------------");//lambda表达式写法Map<String, String> map2 = list.stream().filter(s -> Integer.parseInt(s.split(",")[1]) >= 15).collect(Collectors.toMap(s -> s.split(",")[1],s -> s.split(",")[0]));System.out.println(map2);System.out.println("----------------------------");}
}

运行结果:

二.方法引用

(一.)方法引用的概念和规则

方法引用:把已经有的方法拿过来用,当做函数式接口中抽象方法的方法体.

方法引用的规则:

1.需要具有函数式接口

2.被引用的方法必须存在.

3.被引用的方法和返回值和形参与抽象方法一致.

4.被引用方法的功能要满足当前需求.

(二.)引用静态方法

格式:类名::静态方法

引用类方法,其实就是引用类的静态方法

public class yinyong {public static void main(String[] args) {ArrayList<String> list =new ArrayList<>();Collections.addAll(list,"1","2","3","15564222","126");list.stream().map(new Function<String, Integer>() {@Overridepublic Integer apply(String s) {Integer i = Integer.parseInt(s);return i;}}).forEach(s-> System.out.println(s));System.out.println("-------------------");//1.方法需要已经存在//2.方法的形参和返回值需要跟抽象方法的形参和返回值一样//3.方法的功能需要吧形参的字符串转换成整数list.stream().map(Integer::parseInt).forEach(s-> System.out.println(s));}
}

 

(三).引用成员方法

格式:对象::成员方法

引用对象的实例方法,其实就引用类中的成员方法

public class StringOperation {public boolean stringJudge(String s) {return s.startsWith("张");}
}public class yinyong2 {public static void main(String[] args) {ArrayList<String> list =new ArrayList<>();Collections.addAll(list,"张三","李四","王五","张飞","客小二");//通过在其他类中进行引用//先创建对象,在进行引用list.stream().filter(new StringOperation()::stringJudge).forEach(s-> System.out.println(s));}
}

(四.)引用构造器

格式:类名::构造方法

(注意构造方法中的形参必须和抽象方法保持一致)

public class Student {private String name;private int age;public Student(String s) {String[] arr=s.split(",");this.name=arr[0];this.age=Integer.parseInt(arr[1]);}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}public class yinyong3 {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();Collections.addAll(list,"张三,15","李四,16","王五,17");List<Student> cc = list.stream().map(Student::new).collect(Collectors.toList());System.out.println(cc);}
}

相关文章:

4.7学习总结

java学习 一.Stream流 (一.)概念: Stream将要处理的元素集合看作一种流&#xff0c;在流的过程中&#xff0c;借助Stream API对流中的元素进行操作&#xff0c;比如&#xff1a;筛选、排序、聚合等。Stream流是对集合&#xff08;Collection&#xff09;对象功能的增强&…...

自定义gitlog格式

git log命令非常强大而好用&#xff0c;在复杂系统的版本管理中扮演着重要的角色&#xff0c;但默认的git log命令显示出的东西实在太丑&#xff0c;不好好打扮一下根本没法见人&#xff0c;打扮好了用alias命令拍个照片&#xff0c;就正式出道了&#xff01; 在使用git查看lo…...

Redission--分布式锁

Redission的锁的好处 Redission分布式锁的底层是setnx和lua脚本(保证原子性) 1.是可重入锁。 2.Redisson 锁支持自动续期功能&#xff0c;这可以帮助我们合理控制分布式锁的有效时长&#xff0c;当业务逻辑执行时间超出了锁的过期时间&#xff0c;锁会自动续期&#xff0c;避免…...

非关系型数据库(缓存数据库)redis的集群

目录 一.群集模式——Cluster 1.原理 2.作用 3.特点 4.工作机制 哈希槽 哈希槽的分配 哈希槽可按照集群主机数平均分配&#xff08;默认分配&#xff09; 根据主机的性能以及功能自定义分配 redis集群的分片 分片 如何找到给定key的分片 优势 二. 搭建Redis群集…...

MySQL:表的约束(上)

文章目录 空属性默认值列描述zerofill主键 本篇总结的是MySQL中关于表的约束部分的内容 空属性 在进行表的创建时&#xff0c;会有两个值&#xff0c;null和not null&#xff0c;而数据库默认的字段基本都是空&#xff0c;但是在实际的开发过程中要保证字段不能为空&#xff…...

树莓派5使用体验

原文地址&#xff1a;树莓派5使用体验 - Pleasure的博客 下面是正文内容&#xff1a; 前言 好久没有关于教程方面的博文了&#xff0c;由于最近打算入门嵌入式系统&#xff0c;所以就去购入了树莓派5开发板 树莓派5是2023年10月23日正式发售的&#xff0c;过去的时间不算太远吧…...

代码随想录算法训练营第42天| 背包问题、416. 分割等和子集

01 背包 题目描述&#xff1a;有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 二维dp数组01背包&#xff1a; 确定dp数组以及下标的含义 …...

Node.js安装及环境配置指南

Node.js安装及环境配置指南 一、Node.js的安装 安装Node.js之前&#xff0c;首先需要确保你的电脑已经安装了合适的编译器和开发环境。Node.js是一个开源的、跨平台的JavaScript运行环境&#xff0c;它使得JavaScript可以在服务器端运行。 下载Node.js安装包 访问Node.js的…...

【Java基础】面试题汇总

Java基础面试题1. JVM vs JDK vs JRE 2. 什么是字节码?采用字节码的好处是什么?3. 为什么说 Java 语言“编译与解释并存”&#xff1f;4. AOT 有什么优点&#xff1f;为什么不全部使用 AOT 呢&#xff1f;5. Java 和 C 的区别&#xff1f;6. Java 中的基本数据类型&#xff1…...

数据库事务的超级详细讲解,包括事务特性、事务隔离级别、MVCC(多版本并发控制)

数据库事务&#xff1a; 主要有事务特性&#xff0c;事务的隔离级别&#xff0c;MVCC。 事务特性&#xff1a; 事务&#xff08;Transaction&#xff09;是指作为单个逻辑工作单元执行的一系列操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff…...

鸿蒙Lottie动画-实现控制动画的播放、暂停、倍速播放、播放顺序

介绍 本示例展示了lottie对动画的操作功能。引入Lottie模块&#xff0c;实现控制动画的播放、暂停、倍速播放、播放顺序、播放到指定帧停止或从指定帧开始播放、侦听事件等功能&#xff0c;动画资源路径必须是json格式。 效果预览 使用说明&#xff1a; 进入页面默认开始201…...

C++面试100问与自动驾驶100问

C的学习和面试其实是非常的不友好的&#xff0c;首先C的学习内容非常的多&#xff0c;其次C的面试不单单面试C的知识点&#xff0c;还有它的“七大姑八大姨”&#xff08;计算机网络、数据结构、算法、计算机组成原理、操作系统、编译、xxx的底层实现 and so on&#xff09;。 …...

加速 Redis 操作:掌握管道技术提升性能与效率

Redis 管道技术是一种用于优化 Redis 命令执行效率的机制。在传统的 Redis 操作中&#xff0c;每次向 Redis 服务器发送一个命令&#xff0c;都需要等待命令执行完成并返回结果&#xff0c;这样会导致频繁的网络通信和服务器端的命令执行开销&#xff0c;降低系统的性能和吞吐量…...

深入浅出 -- 系统架构之分布式系统底层的一致性

在分布式领域里&#xff0c;一致性成为了炙手可热的名词&#xff0c;缓存、数据库、消息中间件、文件系统、业务系统……&#xff0c;各类分布式场景中都有它的身影&#xff0c;因此&#xff0c;想要更好的理解分布式系统&#xff0c;必须要理解“一致性”这个概念。 其实关于…...

idea Springboot 电影推荐系统LayUI框架开发协同过滤算法web结构java编程计算机网页

一、源码特点 springboot 电影推荐系统是一套完善的完整信息系统&#xff0c;结合mvc框架和LayUI框架完成本系统springboot dao bean 采用协同过滤算法进行推荐 &#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&…...

xss【2】

1.xss钓鱼 钓鱼攻击利用页面&#xff0c;fish.php黑客钓鱼获取到账号密码存储的位置 xss进行键盘记录 2.xss常规防范 3.xss验证payload XSS&#xff08;跨站攻击&#xff09;_details/open/ontoggle-CSDN博客...

时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…...

css- 4

1.浮动 1. 浮动最初用于实现文字环绕效果 2. 现在&#xff0c;浮动是主流的布局方式之一 1.1元素浮动之后的特点 元素浮动之后&#xff0c;称为浮动元素&#xff0c;具有如下特点&#xff1a; 1. 浮动元素脱离文档流 2. 多个浮动的元素会水平排列&#xff0c;一行放不下自动换…...

22.括号生成

题目描述 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”] 示例 2&#xff1a; 输入…...

JAVA八股--redis

JAVA八股--redis 如何保证Redis和数据库数据一致性redisson实现的分布式锁的主从一致性Redis脑裂现象及解决方案介绍I/O多路复用模型undo log 和 redo log&#xff08;没掌握MyISAM 和 InnoDB 有什么区别&#xff1f; 如何保证Redis和数据库数据一致性 关于异步通知中消息队列…...

OpenClaw 的 Skill免费开源的

OpenClaw 的 Skill 生态非常丰富&#xff0c;其中绝大部分都是免费开源的。以下为您推荐几类实用的免费插件&#xff0c;您可以根据需求选择安装。&#x1f6e1;️ 一、安全与权限控制 (强烈建议优先安装)skill-vetter / clawsec功能&#xff1a;安装插件前自动扫描代码&#x…...

java rabbitmq实现消息协作

场景&#xff1a;数据下载采用rpa实现&#xff0c;数据服务采用java springboot实现&#xff0c;需要进行一键数据补录操作1、设置消息承载的通信队列&#xff0c;java 发送任务到rabbitmq和rpa端收到消息&#xff08;neimeng_data_download&#xff09;后&#xff0c;将下载结…...

用TurtleBot3实测:Navigation2局部代价地图的滚动窗口为何必须用odom坐标系?

TurtleBot3实测&#xff1a;为什么Navigation2局部代价地图必须绑定odom坐标系&#xff1f; 当你在Gazebo中第一次看到TurtleBot3的导航表现时&#xff0c;可能会对局部代价地图&#xff08;Local Costmap&#xff09;的坐标系选择产生疑问。为什么这个实时更新的避障地图要绑定…...

brpc跨平台构建自动化:Jenkins与GitHub Actions终极指南

brpc跨平台构建自动化&#xff1a;Jenkins与GitHub Actions终极指南 【免费下载链接】brpc brpc is an Industrial-grade RPC framework using C Language, which is often used in high performance system such as Search, Storage, Machine learning, Advertisement, Recomm…...

Simple Runtime Window Editor:突破窗口分辨率限制的技术实现与应用指南

Simple Runtime Window Editor&#xff1a;突破窗口分辨率限制的技术实现与应用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 一、场景化问题诊断&#xff1a;分辨率调整的现实挑战 1.1 专业设计工作流的…...

三步解锁QQ空间历史说说备份:数据留存与管理实用指南

三步解锁QQ空间历史说说备份&#xff1a;数据留存与管理实用指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory QQ空间数据备份是许多用户保存青春记忆和重要记录的需求。GetQzonehist…...

C#频谱图振动传感器温度传感器数据采集绘制频谱图和时域图,并存储数据库存储时间200ms左右

C#频谱图振动传感器温度传感器数据采集绘制频谱图和时域图&#xff0c;并存储数据库存储时间200ms左右&#xff0c;可以进行历史频谱图和时域图回放&#xff0c;可以求的最大值并设置阈值报警可以导出报警最近在搞工业设备监控系统的时候&#xff0c;需要实时采集振动和温度数据…...

别再手动算内存了!用STM32CubeIDE的Build Analyzer,5分钟摸清你的H743芯片还剩多少FLASH和RAM

深度解析STM32CubeIDE内存分析&#xff1a;从Build Analyzer到高效内存管理实战 在嵌入式开发的世界里&#xff0c;内存就像是一块珍贵的画布——有限且昂贵。想象一下&#xff0c;当你精心设计的STM32H743程序在关键时刻崩溃&#xff0c;而问题可能仅仅是因为某个全局变量悄悄…...

23种设计模式 - 组合模式(Composite)

组合模式&#xff08;Composite&#xff09;—— 文件夹套文件夹&#xff0c;统一操作 大白话解释 你的电脑里&#xff1a; &#x1f4c4; 文件&#xff08;不能再包含东西&#xff09;&#x1f4c1; 文件夹&#xff08;可以装文件&#xff0c;也可以装文件夹&#xff09; &…...

stm32开发新手福音:告别复杂安装,用快马ai生成带详解的hal库基础代码

作为一名刚接触STM32开发的新手&#xff0c;我最近在尝试用HAL库控制GPIO时遇到了不少麻烦。从下载安装STM32CubeMX到配置工程&#xff0c;每一步都让我这个小白手忙脚乱。直到发现了InsCode(快马)平台&#xff0c;整个过程变得简单多了——不需要自己搭建环境&#xff0c;AI就…...