Java1.8新特性学习笔记
2019独角兽企业重金招聘Python工程师标准>>>
Java1.8中的Collections类的功能增强很多,你可以直接调用串行的Collections.stream()或并行的Collections.parallelStream()来对List,Set中的数据进行处理与操作(不支持Map)。
1:stream是什么?
java.util.Stream是一个接口,是1.8引入。它表示了某原子的序列,可以对原子进行各种操作,Stream可以是中间操作,也可以做为最重操作。作为中间操作时返回流对象本身,作为最重操作时返回某种类型的值。作为中间操作时可以在这个流上多次调用操作方法。
2:lambda表达式
其实lambda表达式实质上是个匿名函数,它由三部分组成:参数列表,箭头(->),以及一个表达式或语句块。来看一个示例:
public void sum(int a, int b){return a+b;
}
转为 lambda表达式为
(int a, int b) -> a + b;
还可以这样写,因为java会根据上下文推断出参数类型
(a, b) -> {return a + b;}
或
(a, b) -> a + b;
3:具体示例
package cn.huiyunche.driver.controller;import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;import org.apache.commons.collections.CollectionUtils;public class Lambda {private static List<String> lambdaList = new ArrayList<>();private static String string = "string";private static String integer = "integer";public Lambda() {initData(string);}public static void initData(String flag) {if (CollectionUtils.isNotEmpty(lambdaList)) {lambdaList.clear();}if (string.equals(flag)) {lambdaList.add("Ulrica");lambdaList.add("Quella");lambdaList.add("Cecilia");lambdaList.add("Claudia");lambdaList.add("Desdemona");lambdaList.add("Indira");} else {lambdaList.add("1");lambdaList.add("2");lambdaList.add("2");lambdaList.add("3");lambdaList.add("3");lambdaList.add("4");lambdaList.add("4");lambdaList.add("4");lambdaList.add("5");lambdaList.add("5");lambdaList.add("5");lambdaList.add("6");lambdaList.add("6");}}// 这种方式就不多讲了,以前旧版本比较常见的做法public static void runThreadUseInnerClass() {new Thread(new Runnable() {@Overridepublic void run() {System.out.println("内部类实现的线程");}}).start();}// 新版本写法public static void thred() {new Thread(() -> System.out.println("内部类实现的线程")).start();}// 遍历listpublic static void ergodicList() {initData(string);System.out.println("=================遍历list开始==========>>>>>>>>>>>");lambdaList.forEach((value) -> System.out.println("value = " + value));System.out.println("<<<<<<<<<<<======遍历list结束=====================");}// 正序排序listpublic static void asc() {initData(integer);System.out.println("=================正序排序list开始==========>>>>>>>>>>>");lambdaList.stream().sorted().forEach((value) -> System.out.println("value = " + value));System.out.println("=================正序排序list结束==========>>>>>>>>>>>");}// 倒序排序listpublic static void desc() {initData(integer);System.out.println("=================倒序排序list开始==========>>>>>>>>>>>");lambdaList.stream().sorted((a, b) -> b.compareTo(a)).forEach((value) -> System.out.println("value = " + value));System.out.println("=================倒序排序list结束==========>>>>>>>>>>>");}// 过滤public static void filter(String val) {initData(string);System.out.println("=================过滤开始==========>>>>>>>>>>>");lambdaList.stream().filter((value) -> value.toLowerCase().contains(val.toLowerCase())).forEach((value) -> System.out.println("value = " + value));System.out.println("=================过滤结束==========>>>>>>>>>>>");}// map使用public static void map() {initData(string);System.out.println("=================map使用开始==========>>>>>>>>>>>");//lambdaList.stream().map((value) -> value.toUpperCase()).forEach((value) -> System.out.println("value = " + value));lambdaList.stream().map(String::toUpperCase).forEach((value) -> System.out.println("value = " + value));System.out.println("=================map使用结束==========>>>>>>>>>>>");}//parallelStream (并行) 和 stream(串行)public static void stream() {System.out.println("=================parallelStream (并行) 和 stream(串行)开始==========>>>>>>>>>>>");int max = 1000000;long t0, t1, count, millis;List<String> list = new ArrayList<>(max);for (int i = 0; i < max; i++) {UUID uuid = UUID.randomUUID();list.add(uuid.toString());}// 串行t0 = System.nanoTime();count = list.stream().sorted().count();System.out.println("count = " + count);t1 = System.nanoTime();millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);System.out.println(String.format("串行排序耗时: %d ms", millis));System.out.println("===========================");long t00, t11, count0, millis0;List<String> list0 = new ArrayList<>(max);for (int i = 0; i < max; i++) {UUID uuid = UUID.randomUUID();list0.add(uuid.toString());}// 串行t00 = System.nanoTime();count0 = list0.stream().sorted().count();System.out.println("count0 = " + count0);t11 = System.nanoTime();millis0 = TimeUnit.NANOSECONDS.toMillis(t11 - t00);System.out.println(String.format("并行排序耗时: %d ms", millis0));System.out.println("===========================");long millis00;millis00 = TimeUnit.NANOSECONDS.toMillis((t1 - t0) - (t11 - t00));System.out.println(String.format("串行比并行排序多耗时: %d ms", millis00));System.out.println("=================parallelStream (并行) 和 stream(串行)结束==========>>>>>>>>>>>");}// noneMatchpublic static void noneMatch(String val) {System.out.println("=================noneMatch使用开始==========>>>>>>>>>>>");initData(string);boolean bool = lambdaList.stream().noneMatch((value) -> value.contains(val));System.out.println("contains bool = " + bool);bool = lambdaList.stream().noneMatch((value) -> value.endsWith(val));System.out.println("endsWith bool = " + bool);bool = lambdaList.stream().noneMatch((value) -> value.startsWith(val));System.out.println("startsWith bool = " + bool);System.out.println("=================noneMatch使用结束==========>>>>>>>>>>>");}// allMatchpublic static void allMatch(String val) {System.out.println("=================allMatch使用开始==========>>>>>>>>>>>");initData(string);boolean bool = lambdaList.stream().allMatch((value) -> value.startsWith(val));System.out.println("bool = " + bool);System.out.println("=================allMatch使用结束==========>>>>>>>>>>>");}// anyMatchpublic static void anyMatch(String val) {System.out.println("=================anyMatch使用开始==========>>>>>>>>>>>");initData(string);boolean bool = lambdaList.stream().anyMatch((value) -> value.matches(val));System.out.println("bool = " + bool);System.out.println("=================anyMatch使用结束==========>>>>>>>>>>>");}// collect(过滤数据,返回List)public static void collect(String val) {System.out.println("=================collect使用开始==========>>>>>>>>>>>");initData(string);List<String> lists = lambdaList.stream().filter((value) -> value.toLowerCase().contains(val.toLowerCase())).collect(Collectors.toList());System.out.println(String.format("lists.size: %d ", lists.size()));lists.forEach((value) -> System.out.println("value = " + value));System.out.println("=================collect使用结束==========>>>>>>>>>>>");}// reduce(拼接数据只返回一个结果集)public static void reduce() {System.out.println("=================reduce使用开始==========>>>>>>>>>>>");initData(string);lambdaList.stream().reduce((value1, value2) -> value1 + value2).ifPresent(System.out::println);System.out.println("=================reduce使用结束==========>>>>>>>>>>>");}// 统计大于2小于5public static void groupBysum() {System.out.println("=================统计大于2小于5使用开始==========>>>>>>>>>>>");initData(integer);lambdaList.parallelStream().map(Integer::new).filter(val -> val >= 2 && val <= 6).collect(Collectors.groupingBy(p -> new Integer(p), Collectors.summingInt(p -> p))).forEach((key, value) -> System.out.println("key = " + key + " value = " +value));System.out.println("=================统计大于2小于5使用结束==========>>>>>>>>>>>");}public static void main(String[] args) {thred();runThreadUseInnerClass();ergodicList();asc();desc();filter("c");map();stream();noneMatch("Claudia");allMatch("U");anyMatch("Claudia");collect("c");reduce();groupBysum();}}
输出结果
内部类实现的线程
内部类实现的线程
=================遍历list开始==========>>>>>>>>>>>
value = Ulrica
value = Quella
value = Cecilia
value = Claudia
value = Desdemona
value = Indira
<<<<<<<<<<<======遍历list结束=====================
=================正序排序list开始==========>>>>>>>>>>>
value = 1
value = 2
value = 3
value = 4
value = 4
value = 4
value = 5
value = 6
=================正序排序list结束==========>>>>>>>>>>>
=================倒序排序list开始==========>>>>>>>>>>>
value = 6
value = 6
value = 5
value = 4
value = 3
value = 2
value = 1
=================倒序排序list结束==========>>>>>>>>>>>
=================过滤开始==========>>>>>>>>>>>
value = Ulrica
value = Cecilia
value = Claudia
=================过滤结束==========>>>>>>>>>>>
=================map使用开始==========>>>>>>>>>>>
value = ULRICA
value = QUELLA
value = CECILIA
value = CLAUDIA
value = DESDEMONA
value = INDIRA
=================map使用结束==========>>>>>>>>>>>
=================parallelStream (并行) 和 stream(串行)开始==========>>>>>>>>>>>
count = 1000000
串行排序耗时: 826 ms
===========================
count0 = 1000000
并行排序耗时: 781 ms
===========================
串行比并行排序多耗时: 44 ms
=================parallelStream (并行) 和 stream(串行)结束==========>>>>>>>>>>>
=================noneMatch使用开始==========>>>>>>>>>>>
contains bool = false
endsWith bool = false
startsWith bool = false
=================noneMatch使用结束==========>>>>>>>>>>>
=================allMatch使用开始==========>>>>>>>>>>>
bool = false
=================allMatch使用结束==========>>>>>>>>>>>
=================anyMatch使用开始==========>>>>>>>>>>>
bool = true
=================anyMatch使用结束==========>>>>>>>>>>>
=================collect使用开始==========>>>>>>>>>>>
lists.size: 3
value = Ulrica
value = Cecilia
value = Claudia
=================collect使用结束==========>>>>>>>>>>>
=================reduce使用开始==========>>>>>>>>>>>
UlricaQuellaCeciliaClaudiaDesdemonaIndira
=================reduce使用结束==========>>>>>>>>>>>
=================统计大于2小于5使用开始==========>>>>>>>>>>>
key = 2 value = 4
key = 3 value = 6
key = 4 value = 12
key = 5 value = 15
key = 6 value = 12
=================统计大于2小于5使用结束==========>>>>>>>>>>>
转载于:https://my.oschina.net/u/2608890/blog/785705
Java1.8新特性学习笔记相关推荐
- jdk7新特性学习笔记
jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...
- Java8新特性学习笔记
Java8新特性学习笔记 文章目录 Java8新特性学习笔记 一.接口和日期处理 1.接口增强 1.1.JDK8以前 VS JDK8 1)接口定义: 1.2.默认方法(default) 1)默认方法格 ...
- JDK8新特性-学习笔记
雀语笔记连接: https://www.yuque.com/g/u22538081/ghlpft/zcbyis/collaborator/join?token=pofOuJabmo9rgKvS# 邀请 ...
- java8新特性学习笔记(Lambda,stream(),filter(),collect(),map())
文章目录 1.lambda表达式(重点) 1.需求分析 2.Lambda表达式初体验 3.Lambda的语法规则 3.1 Lambda练习1 3.1 Lambda练习2 4.Lambda表达式的原理 ...
- C++17新特性学习笔记
c++17最新特性笔记 1.基本语言特性 这一部分介绍了 C++17中新的核心语言特性,但不包括那些专为泛型编程(即 template)设计的特性. 结构化绑定 结构化绑定允许你用一个对象的元素或 ...
- java8新特性学习笔记之唠唠“匿名内部类与lambda”
负一.知道啥是匿名内部类不? 要使用lambda,我觉得你至少得明白匿名内部类是个啥."o -> o.getName"是lambda表达式,"Book::getNa ...
- 阿瑶的ES6新特性学习笔记
导语: 什么是 ECMA? ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个 组织的目标是评估.开发和认可电信和计 ...
- C++11新特性学习笔记
(注:此笔记参照C++ Primer Plus 6) 1.数组初始化 1.)初始化数组时,可以省略等号 //int array[3] = {0, 1, 2}; int array [3] {0, 1, ...
- java8新特性学习笔记链接
https://blog.csdn.net/yitian_66/article/details/81010434 转载于:https://www.cnblogs.com/wangxuekui/p/10 ...
- java 张龙_张龙 JAVA5新特性学习笔记
1.增强的for循环,这点比较简单,就不举例了,但要注意: 增强的for循环与传统的for循环相比写起来更简洁,更容易理解,但是他也有一个缺点:他失去了数组或者集合的索引信 息,如果要对数组或集合里 ...
最新文章
- 栈C/C++实现(数据结构严蔚敏版)
- SAP ABAP实用技巧介绍系列之 通过ST03G查询指定transaction的trace data
- Js中对URL进行转码与解码
- 《黑客X档案2007配套光盘》2007年上半年合集(6期)
- 影音先锋 android下载地址,影音先锋手机版-影音先锋下载v5.8.2 安卓手机版-西西软件下载...
- caj打开文件错误验证服务器,CAJ 打开pdf文件错误(无法读取交叉引用表)的解决方法...
- 微软官方精简Windows7系统——Windows Thin PC的安装过程
- WebStorm下载与安装
- 阿里云服务器购买及使用流程(新手入门图文教程)
- 从字节中取出1bit数据
- 伦敦银走势分析最新,十大国际黄金白银交易平台排名
- NR-PRACH:prach格式以及时频域情况
- C语言 exit 函数 - C语言零基础入门教程
- src中的 “/”、“./”与“../”
- c语言单片机温度调节系统设计,基于单片机的温度控制器系统总体设计方案
- 《Effective Morden C++》Item 8: Prefer nullptr to 0 and NULL.
- 什么是算法?算法的5个特性
- 学生请假管理系统(jsp+servlet)
- 群控手机源码二次开发
- 福州本科计算机有哪些专业,福州大学自考计算机本科,福大自考本科有哪些专业...
热门文章
- java集合升序降序
- c语言程序不知道头结点输出链表,C语言,不带头结点的链表,利用头插法存入信息,然后输出,没有error,却运行不了,求大神指点...
- mysql 删除创建表分区,MySQL分区表创建,分区创建、删除示例
- 中等职业技术学校计算机课件,中等职业技术学校计算机教学论文
- 为什么不能线程调用类的成员函数_SLAM从0到1——13.SLAM中的多线程编程(2)
- C/C++ 各种进制的表示方法/ 进制前缀
- 长三角协同优势产业基金正式设立,总规模1000亿
- 1133 Splitting A Linked List
- I firmly believe
- npm常用命令及参数详解