判断一个操作是惰性求值还是及早求值很简单:只需看它的返回值。如果返回值是 Stream,那么是惰性求值。其实可以这么理解,如果调用惰性求值方法,Stream 只是记录下了这个惰性求值方法的过程,并没有去计算,等到调用及早求值方法后,就连同前面的一系列惰性求值方法顺序进行计算,返回结果。

通用形式为:

Stream.惰性求值.惰性求值. ... .惰性求值.及早求值。

Stream是java.util.stream的一个类。

public class StudyStream {

   private List<HeroEntity> list;

   @Before
public void init(){
list = new ArrayList<>();
list.add(new HeroEntity("影魔","敏捷"));
list.add(new HeroEntity("QOP","智力"));
list.add(new HeroEntity("德鲁伊","敏捷"));
list.add(new HeroEntity("矮人狙击手","敏捷"));
list.add(new HeroEntity("幻影刺客","敏捷"));
list.add(new HeroEntity("撼地神牛","力量"));
} @Test
public void filterAGI() throws InterruptedException {
/**
* List对象调用stream()将会放回一个Stream<E>对象,
* Steam对象调用filter(lambda表达式)会返回一个Steam对象,
* Steam对象.collect(Collectors.toList())返回一个List<E>
*/
List<HeroEntity> listAGI = list.stream()
.filter(l -> {
          return l.getProperty().equals("敏捷"));//注意这里的return,相当于是一个函数了,只终止l -> {函数} 中的函数,所以下面的listAGI.forEach正常执行
        }
.collect(Collectors.toList()); listAGI.forEach(l -> System.out.println(l.toString()));
}
}
输出结果如下:
HeroEntity[name=影魔,property=敏捷,super.toString()=com.study.test.all.java8function.HeroEntity@2da6452]
HeroEntity[name=德鲁伊,property=敏捷,super.toString()=com.study.test.all.java8function.HeroEntity@574c0a81]
HeroEntity[name=矮人狙击手,property=敏捷,super.toString()=com.study.test.all.java8function.HeroEntity@24cc03b0]
HeroEntity[name=幻影刺客,property=敏捷,super.toString()=com.study.test.all.java8function.HeroEntity@3af4a3ab]

参考来源:“https://www.cnblogs.com/snowInPluto/p/5981400.html

Java8Stream的更多相关文章

  1. java8--stream

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  2. java8-Stream集合操作快速上手

    java8-Stream集合操作快速上手   目录 Stream简介 为什么要使用Stream 实例数据源 Filter Map FlatMap Reduce Collect Optional 并发 ...

  3. java8Stream原理深度解析

    Java8 Stream原理深度解析 Author:Dorae Date:2017年11月2日19:10:39 转载请注明出处 上一篇文章中简要介绍了Java8的函数式编程,而在Java8中另外一个比 ...

  4. java8-Stream之数值流

    在Stream里元素都是对象,那么,当我们操作一个数字流的时候就不得不考虑一个问题,拆箱和装箱.虽然自动拆箱不需要我们处理,但依旧有隐含的成本在里面.Java8引入了3个原始类型特化流接口来解决这个问 ...

  5. java8Stream map和flatmap的区别

    map和flatmap的区别 map只是一维 1对1 的映射 而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 , 所以名称上就把map加了个flat 叫flat ...

  6. java8-Stream原理

    前言 java8新特性目前使用非常广泛,其中Stream更是最常用的特性,这篇文章将介绍Stream的原理,如果你现在还不怎么会用的话可以看一下菜鸟教 https://www.runoob.com/j ...

  7. java8-Stream流API

    一回顾与说明 经过前面发布的三章java8的博客,你就懂得了我们为什么要用Lamda表达式,Lamda表达式的原理与函数式接口的关系,从Lamda表达式到方法引用和构造引用. 想要学Stream流你必 ...

  8. java开发两三事(2)-java多数据源+java8stream与LocalDateTime时间差

    1. 场景描述 最近在工作中碰到的几个问题,有点坑,记录下,遇到相同或类似问题的朋友可以参考下. 2. 解决方案 2.1 拼接sql后,多数据源执行 采用Spring+DruidDataSource数 ...

  9. 流式计算(一)-Java8Stream

    大约各位看官君多少也听说了Storm/Spark/Flink,这些都是大数据流式处理框架.如果一条手机组装流水线上不同的人做不同的事,有的装电池,有的装屏幕,直到最后完成,这就是典型的流式处理.如果手 ...

随机推荐

  1. 三元表达式return if 简化 if 判断语句

  2. 判断真实ip

            #region 获取真实ip        /// <summary>        /// 获取真实ip        /// </summary>      ...

  3. ios获取安装的app

    http://www.iphonedevsdk.com/forum/iphone-sdk-development/22289-possible-retrieve-these-information.h ...

  4. springMVC学习(2)

    一.使用注解的处理器映射器和适配器 1) 在这个下面的/org/springframework/web/servlet/DispatcherServlet.properties文件,从这个文件中加载处 ...

  5. R语言学习——输入与输出

    导入数据: grades<-read.table("D:/ProgramData/test1.txt",sep="\t") 求均值:mean() 求方差: ...

  6. class<T>和 class<?>类型 有什么区别

    平时看java源代码的时候,如果碰到泛型的话,我想? T K V E这些是经常出现的,但是有时想不起来代表什么意思,今天整理下: ? 表示不确定的java类型. T 表示java类型. K V 分别代 ...

  7. 1061 Dating (20 分)

    1061 Dating (20 分) Sherlock Holmes received a note with some strange strings: Let's date! 3485djDkxh ...

  8. ThinkPHP 5使用 Composer 组件名称可以从https://packagist.org/ 搜索到

    http://www.phpcomposer.com/ 1 这个是国内的composer网站 thinkphp5自带了composer.phar组件,如果没有安装,则需要进行安装 以下命令全部在项目目 ...

  9. matlab下将图片序列转化为视频文件 && 将为视频文件转化图片序列

    将图片序列转化为视频文件 程序如下: framesPath = 'E:\img\';%图像序列所在路径,同时要保证图像大小相同 videoName = 'Bolt.avi';%表示将要创建的视频文件的 ...

  10. windows下面安装easy_install和pip教程

    方便安装whl:安装完成后,可以使用pip install   xxx.whl 安装一个python轮子 python扩展库的路径:Python\Python36\Lib\site-packages\ ...