Java 8实战--Stream流的使用

1、查找和替换(anyMatch/allMatch/noneMatch/findAny/findFirst)

A、注意点:

* findFirst & findAny差异:
         * 为什么会同时有findFirst和findAny呢?答案是并行。
         * (1)、找到第一个元素在并行上限制更多。
         * (2)、如果你不关心返回的元素是哪个,请使用findAny,因为它在使用并行流时限制较少

B、Java 8的库设计人员引入了Optional<T> 这样就不用返回众所周知容易出问题的null了。

Optional里面几种可以迫使你显式地检查值是否存在或处理值不存在的情形的方法:

* (1)、isPresent()将在Optional包含值的时候返回true, 否则返回false。 
         * (2)、ifPresent(Consumer<T> block)会在值存在的时候执行给定的代码块(Consumer函数式接口;它让你传递一个接收T类型参数,并返回void的Lambda 表达式)
         * (3)、T get()会在值存在时返回值,否则抛出一个NoSuchElement异常。 
         * (4)、T orElse(T other)会在值存在时返回值,否则返回一个默认值(即入参other)

实践代码如下:

package com.csdn.test;import java.util.Arrays;
import java.util.List;
import java.util.Optional;/*** stream 查找和替换*/
public class TestStreamFindAndMatch
{public static void testMatch(List<String> strList){boolean flag = strList.stream()// 流中是否有一个元素能匹配给定的谓词 (终结操作--返回boolean).anyMatch(String::isEmpty);// allMatch 所有都匹配   noneMatch 没有元素匹配System.out.println("AnyMatch-->" + flag);}public static void testFind(List<String> strList){/*** findFirst & findAny差异:* 为什么会同时有findFirst和findAny呢?答案是并行。* 1、找到第一个元素在并行上限制更多。* 2、如果你不关心返回的元素是哪个,请使用findAny,因为它在使用并行流时限制较少*/Optional<String> str = strList.stream()// 返回当前流中的任意元素 (终结操作--返回boolean).findAny();// findFirst 返回第一个元素/*** Optional<T>类(java.util.Optional)是一个容器类,代表一个值存在或不存在 * findAny可能什么元素都没找到,因此,Java 8的库设计人员引入了Optional<T> 这样就不用返回众所周知容易出问题的null了 */optionalOper(str);}public static void optionalOper(Optional<String> str){/*** Optional里面几种可以迫使你显式地检查值是否存在或处理值不存在的情形的方法: * 1、isPresent()将在Optional包含值的时候返回true, 否则返回false。  * 2、ifPresent(Consumer<T> block)会在值存在的时候执行给定的代码块(Consumer函数式接口;它让你传递一个接收T类型参数,并返回void的Lambda 表达式)* 3、T get()会在值存在时返回值,否则抛出一个NoSuchElement异常。  * 4、T orElse(T other)会在值存在时返回值,否则返回一个默认值(即入参other)*/// str.ifPresent(System.out::println);System.out.println(str.orElse("111"));}public static void main(String[] args){List<String> strList = Arrays.asList(new String[]{});testMatch(strList);testFind(strList);}}

输出:

AnyMatch-->false
111

2、reduce--归约操作,函数依次作用于上一次函数的结果(有初始值则第一次为初始值)和流中的下一个元素

以下图例摘自《Java8实战》5.4节

实践代码:

package com.csdn.test;import java.util.Arrays;
import java.util.List;
import java.util.Optional;/*** stream 归约操作* 元素两两进行函数操作,最终所有元素完成函数操作*/
public class TestStreamReduce
{public static void testReduce(List<Integer> intList){// 有初始值,返回Integerint sum = intList.stream().reduce(0, Integer::sum);System.out.println("sum reduce-->" + sum);}public static void testReduceOptional(List<Integer> intList){// 无初始值,返回 Optional<Integer>// 取最小值Optional<Integer> min = intList.stream().reduce(Integer::min);System.out.println("sum reduce-->" + min.get());}public static void main(String[] args){List<Integer> strList = Arrays.asList(new Integer[]{1});testReduce(strList);testReduceOptional(strList);}}

输出:

sum reduce-->1
min reduce-->1

参考书籍:

《Java8实战》

Java 8实战-Stream 查找替换 VS 归约reduce相关推荐

  1. java对mysql进行查找替换_java对mysql的增删改查

    -----连接数据库 package connectdb; import java.sql.*; class Dbcon { // 此处连接数据库,独立开一个类,以后操作数据库的每次连接就不用写这么多 ...

  2. java对mysql进行查找替换_Java对MySQL数据库进行连接、查询和修改【转载】

    一般过程: (1) 调用Class.forName()方法加载驱动程序. (2) 调用DriverManager对象的getConnection()方法,获得一个Connection对象. (3) 创 ...

  3. java 查找 替换_java 查找、替换

    在工作中经常用到的查找替换方式是String的replace.replaceAll.不过配合使用Pattern.Matcher.StringBuffer可以实现更灵活的替换.代码如下,重点看一下&qu ...

  4. java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

    java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

  5. java 查找 替换_Java 查找替换Excel数据

    概述 本文介绍如何在Java程序中来查找并替换Excel中的数据.替换数据时,可设置新数据的样式/格式等. 使用工具 工具:Free Spire.XLS for Java (免费版) 注:可通过e-i ...

  6. [五]java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用...

    reduce-归约 看下词典翻译: 好的命名是自解释的 reduce的方法取得就是其中归纳的含义 java8 流相关的操作中,我们把它理解 "累加器",之所以加引号是因为他并不仅仅 ...

  7. 《Java 8实战》

    Java 8实战 行为参数化 行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式.一言以蔽之,它意味 着拿出一个代码块,把它准备好却不去执行它.这个代码块以后可以被你程序的其他部分调用, 这 ...

  8. Java 8 实战学习笔记

    Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...

  9. 《Java 8实战》 之 Lambda

    <Java 8实战> 之 Lambda 文章目录 <Java 8实战> 之 Lambda Lambda 表达式 Lambda 长什么样子 深入理解Lambda 初始化信息 创建 ...

  10. 【Java】流(Stream)快速入门

    本文是面向Java初学者的流(Stream)学习指导教程.文章内容偏向怎么用,而弱化其诞生背景.流的概念.内部原理等说明解释性的语段. 主要内容: Optional 创建流 操作流 收集流 目录 什么 ...

最新文章

  1. android的dmtracedump工具生成trace文件图片 'dot' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  2. 通过缓存数据库结果提高PHP性能(转)
  3. FindBugs工具常见问题
  4. python dataframe取列名_python – 获取列名在DataFrame中按其值排序
  5. QHBoxLayout
  6. 垃圾回收②---相关概念
  7. 三年经验前端社招——腾讯微保
  8. 公众号 接收规则 消息_微信公众平台 发送模板消息(Java接口开发)
  9. 将矩阵转为一行_初等变换不会改变矩阵的秩
  10. python数据类型总结
  11. 在Window10下基于Anaconda安装Tensorflow以及Keras并基于Spyder进行验证
  12. 从无到有axure原型设计_Axure|微信原型制作
  13. 软件开发再编写过程中,要尽可能地让开发者再后来可以很容易地找到软件的编写逻辑和思路结构。这才是我们需要追求的。...
  14. 如何用python抓地图_【数据不用愁】手把手教你抓取地图矢量数据【附代码和矢量地图数据】...
  15. imb服务器怎么拆硬盘,IBM P750更换本地硬盘
  16. dnf强化卷代码_dnf强化卷叫什么名字?
  17. linux命令行看图工具,六个鲜为人知的超酷Unix/Linux命令
  18. 基于模糊聚类和协同过滤的混合推荐系统
  19. 与传统电商相比,微商城存在哪些优势?
  20. 国家开放大学2021春1079高等代数专题研究题目

热门文章

  1. L298N电机驱动模块的使用
  2. C语言贪吃蛇用VC2022
  3. 数据库系统概论 思维导图
  4. 重庆c语言程序二级考试,重庆市计算机C语言二级考试试题及答案
  5. 重庆计算机c语言二级成绩查询,历届重庆市计算机C语言二级考试试题及答案.pdf...
  6. 人工智能技术与计算机科学区别,智能科学与技术与人工智能的区别
  7. 2.1 数字图像处理——图像基础
  8. python科学计算的几个例子
  9. 8 种 NoSQL 数据库系统对比
  10. 大数据Hadoop(三十):Hadoop3.x的介绍