判断一个操作是惰性求值还是及早求值很简单:只需看它的返回值。如果返回值是 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. Spring中IOC与DI的的区别

    依赖注入的前提: 有IOC的环境,也就是将必须对象的创建权交给了Spring. DI 介绍 Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中, ...

  2. 学习笔记之Moq

    dotnet/src/MoqSample at master · haotang923/dotnet · GitHub https://github.com/htanghtang/dotnet/tre ...

  3. [转]win server 2003 + IIS 6 搭建MVC 运行环境

    本文来自:http://c.jinhusns.com/bar/t-993 win server 2003 + IIS 6 搭建MVC 运行环境 上一篇 下一篇近乎_问阳 发表于:2014-01-07 ...

  4. oracle查看处理过程

    通过函数可以查看数据库的执行过程

  5. javascript控制滚动条的位置,获取控件的位置

    一.如下是定位鼠标在视窗中的位置,先定位视窗和页面直接的距离. function getMousePoint() { var point = {x:0,y:0}; // 如果浏览器支持 pageYOf ...

  6. Linux中的ls命令详细使用

    ls命令是linux下最常用的命令之一,ls跟dos下的dir命令是一样的都是用来列出目录下的文件,下面我们就来一起看看ls的用法 英文全名:List即列表的意思,当我们学习某种东西的时候要做到知其所 ...

  7. PHP 弹出文件下载 原理 代码

    /** * @author      default7<default7@zbphp.com> * @description 演示PHP弹出下载的原理 * * @param $file_n ...

  8. Java 集合 线程安全

    Java中常用的集合框架中的实现类HashSet.TreeSet.ArrayList.ArrayDeque.LinkedList.HashMap.TreeMap都是线程不安全的,如果多个线程同时访问它 ...

  9. Android之sandbox技术

    ART 虚拟机下Hook工具:VirtualHook http://bbs.pediy.com/thread-216786.htm Github: https://github.com/rk700/V ...

  10. Nature | 光学CNN层替换传统CNN层,超省电

    CNN 计算效率的研究一直备受关注,但由于功率和带宽的严格限制,CNN 仍难以应用在嵌入式系统如移动视觉.自动驾驶中.在斯坦福大学发表在 Nature 旗下 Scientific Reports 的这 ...