读Java8函数式编程笔记03_高级集合类和收集器

1. 方法引用
1.1. 一种引用方法的轻量级语法
1.1.1. 提供了一种简短的语法
1.1.2. 标准语法为Classname::methodName
1.2. 凡是使用Lambda表达式的地方,就可以使用
1.3. 自动支持多个参数
1.3.1. 前提是选对了正确的函数接口
2. 出现顺序
2.1. 流是有序的
2.1.1. 流中的元素都是按顺序处理的
2.2. 依赖于数据源和对流的操作
2.3. 在一个有序集合中创建一个流时,流中的元素就按出现顺序排列
2.3.1. List
2.4. 如果集合本身就是无序的,由此生成的流也是无序的
2.4.1. HashSet
2.5. 一些操作在有序的流上开销更大,调用unordered方法消除这种顺序就能解决该问题
2.6. 大多数操作都是在有序流上效率更高,比如filter、map和reduce等
2.7. 使用并行流时,forEach方法不能保证元素是按顺序处理的
2.7.1. 如果需要保证按顺序处理,应该使用forEachOrdered方法
3. 收集器
3.1. 可用来计算流的最终值,是reduce方法的模拟
3.1.1. 生成最终结果的一剂配方
3.1.2. 一种通用的、从流生成复杂值的结构
3.2. 转换成其他集合
3.2.1. 已有代码是为集合编写的,因此需要将流转换成集合传入
3.2.2. 在集合上进行一系列链式操作后,最终希望生成一个值
3.2.3. 写单元测试时,需要对某个具体的集合做断言
3.2.4. toList
3.2.5. toSet
3.2.6. toCollection
3.3. 转换成值
3.3.1. maxBy
3.3.2. minBy
3.3.3. 按某种特定的顺序生成一个值
3.3.4. averagingInt
3.3.4.1. 接受一个Lambda表达式作参数,将流中的元素转换成一个整数,然后再计算平均数
3.4. 数据分块
3.4.1. 分解成两个集合
3.4.2. partitioningBy
3.4.2.1. 接受一个流,并将其分成两部分
3.5. 数据分组
3.5.1. 使用任意值对数据分组
3.5.2. groupingBy
3.5.2.1. 接受一个分类函数,用来对数据分组
3.5.2.2. 类似SQL中的group by操作
3.6. 字符串
3.6.1. joining
3.7. 其他
3.7.1. counting
3.7.2. mapping
3.7.2.1. 在收集器的容器上执行类似map的操作。但是需要指明使用什么样的集合类存储结果
3.7.3. summarizingLong
3.7.4. reducing
3.8. 下游收集器
3.8.1. 生成部分结果的配方
3.8.2. 主收集器中会用到下游收集器
3.9. 特征
3.9.1. 一组描述收集器的对象,框架可以对其适当优化
3.9.2. characteristics方法定义了特征
读Java8函数式编程笔记03_高级集合类和收集器的更多相关文章
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...
- Java8函数式编程探秘
引子 将行为作为数据传递 怎样在一行代码里同时计算一个列表的和.最大值.最小值.平均值.元素个数.奇偶分组.指数.排序呢? 答案是思维反转!将行为作为数据传递. 文艺青年的代码如下所示: public ...
- [2017.02.23] Java8 函数式编程
以前学过Haskell,前几天又复习了其中的部分内容. 函数式编程与命令式编程有着不一样的地方,函数式编程中函数是第一等公民,通过使用少量的几个数据结构如list.map.set,以及在这些数据结构上 ...
- 关于Java8函数式编程你需要了解的几点
函数式编程与面向对象的设计方法在思路和手段上都各有千秋,在这里,我将简要介绍一下函数式编程与面向对象相比的一些特点和差异. 函数作为一等公民 在理解函数作为一等公民这句话时,让我们先来看一下一种非常常 ...
- Java8 函数式编程详解
Java8 函数式编程详解 Author:Dorae Date:2017年11月1日23:03:26 转载请注明出处 说起Java8,可能很多人都已经知道其最大的改进,就是引入了Lambda表达式与S ...
- java8函数式编程(转载)
1. 概述 1.1 函数式编程简介 我们最常用的面向对象编程(Java)属于命令式编程(Imperative Programming)这种编程范式.常见的编程范式还有逻辑式编程(Logic Progr ...
- 漫漫人生路,学点Jakarta基础-Java8函数式编程
接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...
- Java8函数式编程的宏观总结
1.java8优势通过将行为进行抽象,java8提供了批量处理数据的并行类库,使得代码可以在多核CPU上高效运行. 2.函数式编程的核心使用不可变值和函数,函数对一个值进行处理,映射成另一个值. 3. ...
- java8函数式编程实例
什么是函数式编程 函数式编程是java8的一大特色,也就是将函数作为一个参数传递给指定方法.别人传的要么是基本数据类型,要么就是地址引用 ,我们要穿一个“动作”. Stream 说到函数式编程,就不得 ...
- Java8函数式编程以及Lambda表达式
第一章 认识Java8以及函数式编程 尽管距离Java8发布已经过去7.8年的时间,但时至今日仍然有许多公司.项目停留在Java7甚至更早的版本.即使已经开始使用Java8的项目,大多数程序员也仍然采 ...
随机推荐
- [AGC057D] Sum Avoidance
Link 本篇题解大部分内容来自这篇文章 首先题意翻译: 给定一个正整数 \(S\) ,称一个正整数集合 \(A\) 是好的,当且仅当它满足以下条件: \(A\) 中元素在 \((0,S)\) 之间 ...
- Codeforces Round #802 (Div. 2)C. Helping the Nature(差分)
题目链接 题目大意: 给你一个有n个元素的数组a,你可以通过一下三种操作使数组的每一个值都为0: 选择一个下标i,然后让a[1],a[2]....a[ i ] 都减一; 选择一个下标i,然后让a[i] ...
- Websocket集群解决方案
最近在项目中在做一个消息推送的功能,比如客户下单之后通知给给对应的客户发送系统通知,这种消息推送需要使用到全双工的websocket推送消息. 所谓的全双工表示客户端和服务端都能向对方发送消息.不使用 ...
- CSP-J/S 2021 游记
\(\large\texttt{Day -1}\) 晚上好累啊,去集训了,回来之后发现十一点了还码了一会儿,只能祈求上帝明天不会打瞌睡. \(\large\texttt{Day 0}\) 意料中的事情 ...
- Byte和byte的区别
Byte和byte的区别 背景 今天学习网络编程中,在建立Udp连接时,使用byte[]数组接收传输的数据,但是byte[]错写为Byte[],导致错误. //接收数据: Byt ...
- Java:ArrayList的基本使用(学习笔记)
集合和数组的对比(为什么要有集合) 分为俩点 1. 长度:数组的长度是固定的,集合的长度是可变的. 2. 存储类型: 数组:可以存储基本数据类型,引用数据类型. 集合:只能存储引用数据类型. 小t ...
- IOT黑客入门篇之初探Badusb
什么是Badusb? BadUSB是一种使用带有恶意软件编程的USB设备的计算机安全攻击.例如,USB 闪存驱动器可以包含可编程的Intel 8051微控制器,该微控制器可以重新编程,将USB闪存 ...
- 24、编写一个函数void replace(char *str1,char *str2,int i,int j),将字符串中str1中的第i个字符开始到j个字符结束的位置替换为str2.
/* 编写一个函数void replace(char *str1,char *str2,int i,int j),将字符串中str1中的第i个字符开始到j个字符结束的位置替换为str2. */ #in ...
- [排序算法] 双向冒泡排序 (C++)
前言 本文章是建立在冒泡排序的基础上写的,如还有对 冒泡排序 不了解的童鞋,可以看看这里哦~ 冒泡排序 C++ 双向冒泡排序原理 双向冒泡排序 的基本思想与 冒泡排序还是一样的.冒泡排序 每次将相邻的 ...
- 自动增加 Android App 的版本号
一般的 C# 应用程序中都有一个 AssemblyInfo.cs 文件,其中的 AssemblyVersion attribute 就可以用来设置该应用程序的版本号.譬如, [assembly: As ...