百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Java 8 的这些特性,用起来真的很爽

bigegpt 2024-08-27 11:54 2 浏览

一直在写中间件相关的代码,提供SDK给业务方使用,但很多业务方还一直停留在1.7版本,迟迟不升级,为了兼容性,不敢在代码中使用Java8的一些新特性,比如Stream之类的,虽然不能用,但还是要学一下。



Stream 是什么

Stream 是Java 8中添加的一个新特性,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它借助于 Lambda 表达式,可以让你以一种声明的方式处理数据,可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

Stream Demo

直接上Demo,感受一下

Stream 如何工作

当使用一个流的时候,通常包括三个基本步骤:

  • 获取一个数据源(source)
  • 数据转换
  • 执行操作获取想要的结果

每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道,如下图所示。



在Stream中,分为两种操作

  • 中间操作
  • 结束操作

中间操作返回Stream,终端操作返回void或者非Stream结果,在demo中, filter、 map、 sorted都算是中间操作,而 forEach是一个结束操作。

Stream 如何生成

创建Stream的方式很多,最常见的是从Collections,List 和 Set中生成

在对象myList上调用方法 stream() 返回一个常规对象Stream。

也可以从一堆已知对象中生成。

当然了,还有其它方式:

  • Collection.stream()
  • Collection.parallelStream()
  • BufferedReader.lines()
  • Files.walk()
  • BitSet.stream()
  • Random.ints()
  • JarFile.stream()
  • ....

常规操作

forEach

forEach方法接收一个 Lambda 表达式,用来迭代流中的每个数据

map

map 用于映射每个元素到对应的结果

filter

filter 用于通过设置的条件过滤出元素

limit

limit 用于用于获取指定数量的流

sorted

sorted 用于对流进行排序

Match

有三个 match 方法,从语义上说:

  • allMatch:Stream 中全部元素符合传入的 predicate,返回 true
  • anyMatch:Stream 中只要有一个元素符合传入的 predicate,返回 true
  • noneMatch:Stream 中没有一个元素符合传入的 predicate,返回 true

它们都不是要遍历全部元素才能返回结果。例如 allMatch 只要一个元素不满足条件,就 skip 剩下的所有元素,返回 false。

reduce

reduce 方法根据指定的函数将元素序列累积到某个值。此方法有两个参数:

  • 起始值
  • 累加器函数。

如果有一个List,希望得到所有这些元素和一些初始值的总和。

collect

Collectors类中提供了功能丰富的工具方法

  • toList
  • toSet
  • toCollection
  • toMap
  • ...

而这些方法,都需要通过 collect 方法传入。

collect 可以把Stream数据流转化为Collection对象,

骚技巧

for循环

除了常规的对象Stream,还有一些有特殊类型的Stream,用于处理基本数据类型int、long和double,它是IntStream、LongStream和DoubleStream。

比如可以使用IntStream.range()来代替常规的for循环。

随机数

Random的ints方法可以返回一个随机数据流,比如返回1到100的10个随机数。

大小写转化

Stream 特点

总之,Stream 的特性可以归纳为:

无存储

Stream并不是一种数据结构,它只是某种数据源的一个视图

安全性

对Stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新Stream。

惰式执行

Stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。

一次性

Stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

lambda

所有 Stream 的操作必须以 lambda 表达式为参数

java学习资料获取方式

右上角点击关注,私信回复“学习”

私信不要多字,不要少字,不要错字,私信方法:点击我头像,进入主页面,右上角有私信功能,在关注的上方位置

相关推荐

10w qps缓存数据库——Redis(redis缓存调优)

一、Redis数据库介绍:Redis:非关系型缓存数据库nosql:非关系型数据库没有表,没有表与表之间的关系,更不存在外键存储数据的形式为key:values的形式c语言写的服务(监听端口),用来存...

Redis系列专题4--Redis配置参数详解

本文基于windowsX64,3.2.100版本讲解,不同版本默认配置参数不同在Redis中,Redis的根目录中有一个配置文件(redis.conf,windows下为redis.windows....

开源一夏 | 23 张图,4500 字从入门到精通解释 Redis

redis是目前出场率最高的NoSQL数据库,同时也是一个开源的数据结构存储系统,在缓存、数据库、消息处理等场景使用的非常多,本文瑞哥就带着大家用一篇文章入门这个强大的开源数据库——Redis。...

redis的简单与集群搭建(redis建立集群)

Redis是什么?是开源免费用c语言编写的单线程高性能的(key-value形式)内存数据库,基于内存运行并支持持久化的nosql数据库作用主要用来做缓存,单不仅仅是做缓存,比如:redis的计数器生...

推荐几个好用Redis图形化客户端工具

RedisPlushttps://gitee.com/MaxBill/RedisPlusRedisPlus是为Redis可视化管理开发的一款开源免费的桌面客户端软件,支持Windows、Linux...

关于Redis在windows上运行及fork函数问题

Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成。微软的一些工程师花费时间在解决在...

你必须懂的Redis十大应用场景(redis常见应用场景)

Redis作为一款高性能的键值存储数据库,在互联网业务中有着广泛的应用。今天,我们就来详细盘点一下Redis的十大常用业务场景,并附上Golang的示例代码和简图,帮助大家更好地理解和应用Redis。...

极简Redis配置(redis的配置)

一、概述Redis的配置文件位于Redis安装目录下,文件名为redis.conf(Windows名为redis.windows.conf,linux下的是redis.conf)你可以通过C...

什么是redis,怎么启动及如何压测

从今天起咱们一起来学习一下关于“redis监控与调优”的内容。一、Redis介绍Redis是一种高级key-value数据库。它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富。...

一款全新Redis UI可视化管理工具,支持WebUI和桌面——P3X Redis UI

介绍P3XRedisUI这是一个非常实用的RedisGUI,提供响应式WebUI访问或作为桌面应用程序使用,桌面端是跨平台的,而且完美支持中文界面。Githubhttps://github....

windows系统的服务器快速部署java项目环境地址

1、mysql:https://dev.mysql.com/downloads/mysql/(msi安装包)2、redis:https://github.com/tporadowski/redis/r...

window11 下 redis 下载与安装(windows安装redis客户端)

#热爱编程是一种怎样的体验#window11下redis下载与安装1)各个版本redis下载(windows)https://github.com/MicrosoftArchive/r...

一款轻量级的Redis客户端工具,贼好用!

使用命令行来操作Redis是一件非常麻烦的事情,我们一般会选用客户端工具来操作Redis。今天给大家分享一款好用的Redis客户端工具TinyRDM,它的界面清新又优雅,希望对大家有所帮助!简介Ti...

一个.NET开发且功能强大的Windows远程控制系统

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!项目介绍SiMayRemoteMonitorOS是一个基于Windows的远程控制系统,完...

Redis客户端工具详解(4款主流工具)

大家好,我是mikechen。Redis是大型架构的基石,也是大厂最爱考察内容,今天就给大家重点详解4款Redis工具@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集...