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新特性学习笔记相关推荐

  1. jdk7新特性学习笔记

    jdk7新特性学习笔记 从网络down了视频看,记录下学过的东西. 1.二进制字面量 JDK7开始,可以用二进制来表示整数(byte,short,int和long),语法:在二进制数值前面加 0b或者 ...

  2. Java8新特性学习笔记

    Java8新特性学习笔记 文章目录 Java8新特性学习笔记 一.接口和日期处理 1.接口增强 1.1.JDK8以前 VS JDK8 1)接口定义: 1.2.默认方法(default) 1)默认方法格 ...

  3. JDK8新特性-学习笔记

    雀语笔记连接: https://www.yuque.com/g/u22538081/ghlpft/zcbyis/collaborator/join?token=pofOuJabmo9rgKvS# 邀请 ...

  4. java8新特性学习笔记(Lambda,stream(),filter(),collect(),map())

    文章目录 1.lambda表达式(重点) 1.需求分析 2.Lambda表达式初体验 3.Lambda的语法规则 3.1 Lambda练习1 3.1 Lambda练习2 4.Lambda表达式的原理 ...

  5. C++17新特性学习笔记

    c++17最新特性笔记 1.基本语言特性 ​ 这一部分介绍了 C++17中新的核心语言特性,但不包括那些专为泛型编程(即 template)设计的特性. 结构化绑定 结构化绑定允许你用一个对象的元素或 ...

  6. java8新特性学习笔记之唠唠“匿名内部类与lambda”

    负一.知道啥是匿名内部类不? 要使用lambda,我觉得你至少得明白匿名内部类是个啥."o -> o.getName"是lambda表达式,"Book::getNa ...

  7. 阿瑶的ES6新特性学习笔记

    导语: 什么是 ECMA? ECMA(European Computer Manufacturers Association)中文名称为欧洲计算机制造商协会,这个 组织的目标是评估.开发和认可电信和计 ...

  8. C++11新特性学习笔记

    (注:此笔记参照C++ Primer Plus 6) 1.数组初始化 1.)初始化数组时,可以省略等号 //int array[3] = {0, 1, 2}; int array [3] {0, 1, ...

  9. java8新特性学习笔记链接

    https://blog.csdn.net/yitian_66/article/details/81010434 转载于:https://www.cnblogs.com/wangxuekui/p/10 ...

  10. java 张龙_张龙 JAVA5新特性学习笔记

    1.增强的for循环,这点比较简单,就不举例了,但要注意: 增强的for循环与传统的for循环相比写起来更简洁,更容易理解,但是他也有一个缺点:他失去了数组或者集合的索引信  息,如果要对数组或集合里 ...

最新文章

  1. 栈C/C++实现(数据结构严蔚敏版)
  2. SAP ABAP实用技巧介绍系列之 通过ST03G查询指定transaction的trace data
  3. Js中对URL进行转码与解码
  4. 《黑客X档案2007配套光盘》2007年上半年合集(6期)
  5. 影音先锋 android下载地址,影音先锋手机版-影音先锋下载v5.8.2 安卓手机版-西西软件下载...
  6. caj打开文件错误验证服务器,CAJ 打开pdf文件错误(无法读取交叉引用表)的解决方法...
  7. 微软官方精简Windows7系统——Windows Thin PC的安装过程
  8. WebStorm下载与安装
  9. 阿里云服务器购买及使用流程(新手入门图文教程)
  10. 从字节中取出1bit数据
  11. 伦敦银走势分析最新,十大国际黄金白银交易平台排名
  12. NR-PRACH:prach格式以及时频域情况
  13. C语言 exit 函数 - C语言零基础入门教程
  14. src中的 “/”、“./”与“../”
  15. c语言单片机温度调节系统设计,基于单片机的温度控制器系统总体设计方案
  16. 《Effective Morden C++》Item 8: Prefer nullptr to 0 and NULL.
  17. 什么是算法?算法的5个特性
  18. 学生请假管理系统(jsp+servlet)
  19. 群控手机源码二次开发
  20. 福州本科计算机有哪些专业,福州大学自考计算机本科,福大自考本科有哪些专业...

热门文章

  1. java集合升序降序
  2. c语言程序不知道头结点输出链表,C语言,不带头结点的链表,利用头插法存入信息,然后输出,没有error,却运行不了,求大神指点...
  3. mysql 删除创建表分区,MySQL分区表创建,分区创建、删除示例
  4. 中等职业技术学校计算机课件,中等职业技术学校计算机教学论文
  5. 为什么不能线程调用类的成员函数_SLAM从0到1——13.SLAM中的多线程编程(2)
  6. C/C++ 各种进制的表示方法/ 进制前缀
  7. 长三角协同优势产业基金正式设立,总规模1000亿
  8. 1133 Splitting A Linked List
  9. I firmly believe
  10. npm常用命令及参数详解