Lambda表达式
Lambda 表达式可以替代只有一个抽象函数的接口实现. Lambda表达式同时还提升了对集合、框架的迭代、遍历、过滤数据的操作。

Lambda表达式使用场景
任何有函数式接口的地方

函数式接口

只有一个抽象方法(Object类中的方法除外)的接口是函数式接口

Supplier 代表一个输出
Consumer 代表一个输入
BiConsumer 代表两个输入

Function 代表一个输入,一个输出(一般输入和输出是不同类型的)
UnaryOperator 代表一个输入,一个输出(输入和输出是相同类型的)

BiFunction 代表两个输入,一个输出(一般输入和输出是不同类型的)
BinaryOperator 代表两个输入,一个输出(输入和输出是相同类型的)

Stream特性
1:不是数据结构,没有内部存储
2:不支持索引访问
3:延迟计算
4:支持并行
5:很容易生成数组或集合(List,Set)
6:支持过滤,查找,转换,汇总,聚合等操作

Stream运行机制
Stream分为 源source,中间操作,终止操作
流的源可以是一个数组、一个集合、一个生成器方法,一个I/O通道等等。
一个流可以有零个和或者多个中间操作,每一个中间操作都会返回一个新的流,供下一个操作使用。一个流只会有一个终止操作
Stream只有遇到终止操作,它的源才开始执行遍历操作

源source
1、通过数组
2、通过集合来
3、通过Stream.generate方法来创建
4、通过Stream.iterate方法来创建
5、其他API创建

中间操作
过滤 filter
去重 distinct
排序 sorted
截取 limit、skip
转换 map/flatMap
其他 peek

终止操作
循环 forEach
计算 min、max、count、 average、sum
匹配 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny
汇聚 reduce
收集器 toArray collect

java8 Lambda及Stream学习笔记的更多相关文章

  1. 【Java】Java8新增的Lambda表达式_学习笔记

    一.Lambda表达式可以简化创建匿名内部类对象 1.不需要new XXX(){}这种繁琐代码. 2.不需要指出重写的方法名. 3.不要给出重写的方法的返回值类型. 4.Lambda相当于一个匿名方法 ...

  2. Java8 Lambda和Stream的用法

    package com.zhangxueliang.demo; import java.util.ArrayList; import java.util.List; import java.util. ...

  3. c#Stream学习笔记

    C# 温故而知新:Stream篇(—) http://www.cnblogs.com/JimmyZheng/archive/2012/03/17/2402814.html 基本概念重点看这一篇. 什么 ...

  4. Stream学习笔记

    1. 创建Stream实例的五种方式 @Test public void test1(){ // 创建Stream对象的第一种方式 List<String> list = Lists.ne ...

  5. java Stream学习笔记

    1.Stream与io无关. 2.Stream和用普通的循环没有太大区别,甚至时间复杂度更高,代码可读性差(通常代码行数更少). 3.流操作就是把循环要做的任务单独抽取出来,最终通过编译在一起. 来看 ...

  6. C#中匿名委托以及Lambda表达式的学习笔记

    一. C#从1.0到4.0, 随着Linq,泛型的支持,代码越来越简单优雅 , , , , , , , , , }; IEnumerable< select n; newNums = newNu ...

  7. PHP stream 学习笔记一(同步阻塞 IO 模型)

    原文http://blog.csdn.net/shagoo/article/details/6396089 [root@localhost php]# vi server_one.php <?p ...

  8. java8 lambda 与 stream

    参见:https://www.bilibili.com/video/av14372754/?p=2

  9. Java8学习笔记----Lambda表达式 (转)

    Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家       本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...

  10. 【Java学习笔记之三十一】详解Java8 lambda表达式

    Java 8 发布日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Java 8之前 ...

随机推荐

  1. 所有前端都要看的2D游戏化互动入门基础知识

    简介: 在非游戏环境中将游戏的思维和游戏的机制进行整合运用,以引导用户互动和使用 本文作者:淘系前端团队-Eva.js作者-明非 背景 现在越来越多的公司和 App 开始使用游戏化的方式去做产品了,所 ...

  2. [GPT] 使用 nodejs的 puppeteer 库使用完关闭后,linux上面有很多 chrome 进程

      在使用 Node.js 的 Puppeteer 库时,如果你在使用完后关闭了浏览器,但在 Linux 上仍然存在很多 Chrome 进程,可能是因为没有正确地关闭所有相关的进程. 可以尝试以下方法 ...

  3. [Linux] 日志管理: rsyslog 日志格式 / 配置文件详解

    1. 日志文件格式包含以下四列: 事件时间 | 发生事件的服务器的主机名 | 产生事件的服务名或程序名 | 事件的具体信息 2. /etc/rsyslog.conf 配置文件 # 服务名称 [连接符号 ...

  4. [Go] 结构体成员的第三个位置上标签的作用

    结构体成员加了第三个位置的标签,在转换指定类型时,key 会使用指定的名字. package main import ( "encoding/json" "log&quo ...

  5. 将Go开发的代码部署到k8s集群

    一.在服务器上编译go程序 1.1 编译go语言程序 # 安装go yum install go -y mkdir /root/test && cd /root/test # 设置代理 ...

  6. Gradle8.4构建SpringBoot多模块项目

    Gradle8.4构建SpringBoot多模块项目 一.基本 1.版本 这个版本是Jdk8最后一个SpringBoot版本 软件 版本 Gradle 8.4 SpringBoot 2.7.15 JD ...

  7. Mybatis学习五($和#区别以及其他tips)

    1.$和#区别 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于 ...

  8. Partition和ReduceTask的关系

    先看源码: numPartitions = conf.getNumReduceTasks(); if (numPartitions > 1) { //设置了ReduceTask个数后(大于1), ...

  9. ruby http请求组件

    github地址 https://github.com/rest-client/rest-client gemfile里添加 gem 'rest-client', '~> 2.0' 执行 bun ...

  10. IPv6 — 基于邻居发现协议的通信方式

    目录 文章目录 目录 前文列表 IPv6 的通信方式 NDP(Neighbor Discovery Protocol,邻居发现协议) IPv6 地址自动配置 无状态自动配置概述 前文列表 <IP ...