jdk1.8新特性的应用-Stream 的终止操作

public class TestStreamApi4 {List<Employee> emps = Arrays.asList(new Employee("张三", 23, 14000.11, "深圳"),new Employee("李四", 34, 26000.33, "北京"),new Employee("王五", 55, 18000.00, "上海"),new Employee("赵六", 32, 22000.88, "广州"),new Employee("田七", 23, 14000.11, "深圳"));/** 收集* collect--将流转换为其他形式.接收一个Collector接口得实现,用于给Stream中的元素做汇总的方法* */@Testpublic void test1() {//1.收集所有员工的姓名List<String> list = emps.stream().map(Employee::getName).collect(Collectors.toList());System.out.println("list = " + list);//list = [张三, 李四, 王五, 赵六, 田七]}@Testpublic void test2() {//2.收集所有员工的地址并去重     Employee::getAddress = ->e.getAddress()Set<String> set = emps.stream().map(Employee::getAddress).collect(Collectors.toSet());System.out.println("set = " + set);//set = [上海, 广州, 深圳, 北京]}/** 计算* */@Testpublic void test3() {//总数Long lo = emps.stream().collect(Collectors.counting());System.out.println("lo = " + lo); //lo = 5//平均值Double aDouble = emps.stream().collect(Collectors.averagingDouble(Employee::getSalary));System.out.println("aDouble = " + aDouble); // aDouble = 18800.286//总和Double aDouble1 = emps.stream().collect(Collectors.summingDouble(e -> e.getSalary()));System.out.println("aDouble1 = " + aDouble1);//aDouble1 = 94001.43000000001//最大值Optional<Employee> max = emps.stream().collect(Collectors.maxBy((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary())));System.out.println(max.get());//Employee{name='李四', age=34, salary=26000.33, address='北京'}//最小值Optional<Employee> min = emps.stream().collect(Collectors.minBy((e1, e2) -> Double.compare(e1.getSalary(), e2.getSalary())));System.out.println(min.get());//Employee{name='张三', age=23, salary=14000.11, address='深圳'}}/** 分组* */@Testpublic void test4() {//按照地址分组Map<String,List<Employee>> map = emps.stream().collect(Collectors.groupingBy(Employee::getAddress));System.out.println("map = " + map);//map = {广州=[Employee{name='赵六', age=32, salary=22000.88, address='广州'}], 上海=[Employee{name='王五', age=55,// salary=18000.0, address='上海'}], 北京=[Employee{name='李四', age=34, salary=26000.33, address='北京'}],// 深圳=[Employee{name='张三', age=23, salary=14000.11, address='深圳'}, Employee{name='田七', age=23,// salary=14000.11, address='深圳'}]}}/** 分区* */@Testpublic void test5() {Map<Boolean, List<Employee>> map = emps.stream().collect(Collectors.partitioningBy(e -> e.getSalary()>15000));System.out.println("map = " + map);//map = {false=[Employee{name='张三', age=23, salary=14000.11, address='深圳'}, Employee{name='田七', age=23, salary=14000.11, address='深圳'}], true=[Employee{name='李四', age=34, salary=26000.33, address='北京'}, Employee{name='王五', age=55, salary=18000.0, address='上海'}, Employee{name='赵六', age=32, salary=22000.88, address='广州'}]}}
}

练习

package com.gl.testLambda;import org.junit.Test;import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;/*** Created by IntelliJ Idea 2018.1* Author:Gavin Zhang* Data:  2021-08-03* Time:  21:42*/
public class TestStreamApi5 {List<TradeList> tradeLists = Arrays.asList(new TradeList("唐僧","东土大唐","2008",2000),new TradeList("孙悟空","花果山","2008",1500),new TradeList("猪八戒","高老庄","2008",1000),new TradeList("沙和尚","流沙河","2008",800),new TradeList("刘备","蜀","2009",3000),new TradeList("关羽","蜀","2009",2200),new TradeList("张飞","蜀","2009",2000),new TradeList("曹操","魏","2010",1500),new TradeList("曹丕","魏","2010",1500));/** 练习* */@Testpublic void test1() {//1.找出2008年发生的所有交易订单,并按照交易额从小到大排序List<TradeList> collect = tradeLists.stream().filter(e -> e.getYear().equals("2008")).sorted((e1,e2)->Double.compare(e1.getTradeAmount(),e2.getTradeAmount())).collect(Collectors.toList());System.out.println("collect = " + collect);//collect = [TradeList{name='沙和尚', city='流沙河', year='2008', tradeAmount=800.0}, TradeList{name='猪八戒',// city='高老庄', year='2008', tradeAmount=1000.0}, TradeList{name='孙悟空', city='花果山', year='2008',// tradeAmount=1500.0}, TradeList{name='唐僧', city='东土大唐', year='2008', tradeAmount=2000.0}]}@Testpublic void test2() {//2.交易员都在哪些不同的城市List<String> collect = tradeLists.stream().map(e -> e.getCity()).distinct().collect(Collectors.toList());System.out.println("collect = " + collect);//collect 有序 = [东土大唐, 花果山, 高老庄, 流沙河, 蜀, 魏]Set<String> collect1 = tradeLists.stream().map(e -> e.getCity()).collect(Collectors.toSet());System.out.println("collect1 = " + collect1);//collect1 无序 = [蜀, 花果山, 流沙河, 高老庄, 东土大唐, 魏]}@Testpublic void test3() {//3.查找出来自蜀的交易员,并按照姓名排序List<String> list = tradeLists.stream().filter(t -> t.getCity().equals("蜀")).collect(Collectors.toList()).stream().map(e -> e.getName()).sorted().collect(Collectors.toList());System.out.println("list = " + list);//list = [关羽, 刘备, 张飞]}@Testpublic void test4() {//4.有没有交易员是在魏工作的boolean anyMatch = tradeLists.stream().anyMatch(e -> e.getCity().equals("蜀"));System.out.println("anyMatch = " + anyMatch);}@Testpublic void test5() {//5.计算生活在蜀的交易员的所有交易额Optional<Double> sum = tradeLists.stream().filter(e -> e.getCity().equals("蜀")).map(e->e.getTradeAmount()).reduce(Double::sum);System.out.println(sum.get());//7200.0Optional<Double> sum2 = tradeLists.stream().filter(e -> e.getCity().equals("蜀")).collect(Collectors.toList()).stream().map(e -> e.getTradeAmount()).reduce(Double::sum);System.out.println(sum2.get());//7200.0}@Testpublic void test6() {//6.所有交易中,最少/最高的交易额是多少//最少Optional<Double> min = tradeLists.stream().map(e -> e.getTradeAmount()).sorted().collect(Collectors.toList()).stream().findFirst();System.out.println(min.get());//800.0//最少Optional<Double> min1 = tradeLists.stream().map(e -> e.getTradeAmount()).min(Double::compareTo);System.out.println(min1.get());//800.0//最多Optional<Double> max = tradeLists.stream().map(e -> e.getTradeAmount()).max(Double::compareTo);System.out.println(max.get());//3000.0}@Testpublic void test7() {//找到交易额最小的交易信息Optional<TradeList> min = tradeLists.stream().min((e1, e2) -> Double.compare(e1.getTradeAmount(), e2.getTradeAmount()));System.out.println(min.get());//TradeList{name='沙和尚', city='流沙河', year='2008', tradeAmount=800.0}Optional<TradeList> max = tradeLists.stream().max((e1, e2) -> Double.compare(e1.getTradeAmount(), e2.getTradeAmount()));System.out.println(max.get());//TradeList{name='刘备', city='蜀', year='2009', tradeAmount=3000.0}}
}

jdk1.8新特性的应用-Stream 的终止操作相关推荐

  1. jdk1.8新特性的应用-Stream Api

    /*** Created by IntelliJ Idea 2018.1* Author:Gavin Zhang* Data: 2021-07-29* Time: 22:06*/ public cla ...

  2. Java8新特性总结 -5.Stream API函数式操作流元素集合

    所有示例代码打包下载 : 点击打开链接 Java8新特性 : 接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/T ...

  3. Jdk1.8新特性————stream流操作,让代码更优雅

    首先附上官方文档https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html#NonInterfere ...

  4. JDK1.8新特性之Lambda表达式+Stream流+函数式接口

    一.Lambda表达式 Lambda表达式,是JDK1.8引入的一种语法,这种语法可以对匿名内部类的写法,进行简写. 1.快速入门 package org.westos.demo2;import ja ...

  5. JDK1.8 新特性(全)

    JDK1.8 新特性 本文主要介绍了JDK1.8版本中的一些新特性,乃作者视频观后笔记,仅供参考. jdk1.8新特性知识点: Lambda表达式 函数式接口 方法引用和构造器调用 Stream AP ...

  6. jdk1.8新特性_Lambda表达式的引入

    jdk1.8新特性_Lambda表达式的引入 引入 需求: 获取工资大于20000的员工信息 public class Employee {private String name;private in ...

  7. java 1.7 可变参数,JDK1.7新特性(2):异常和可变长参数处理

    异常 jdk1.7对try--catch--finally的异常处理模式进行了增强,下面我们依次来看增强的方面. 1. 为了防止异常覆盖,给Throwable类增加了addSuppressed方法,可 ...

  8. JDK1.6“新“特性Instrumentation之JavaAgent

    JDK1.6"新"特性Instrumentation之JavaAgent 文章目录 JDK1.6"新"特性Instrumentation之JavaAgent 简 ...

  9. Java8新特性 Lambda、Stream、Optional实现原理

    Java8新特性 Lambda.Stream.Optional实现原理 一.接口中默认方法修饰为普通方法 二.Lambda表达式 2.1.什么是Lambda表达式 2.2.为什么要使用Lambda表达 ...

最新文章

  1. Python多线程调试
  2. gantt markdown
  3. textureview 旋转90度后平铺_轮滑知识 | 单排轮滑的旋转技巧
  4. 网站模糊测试爆破工具Wfuzz
  5. flowable对比
  6. 算法学习--买卖股票的最佳时机
  7. 使用URLRewriter实现URL重写
  8. 【2017年第4期】大数据标准体系
  9. 构建嵌入式LINUX的NFS【ZT】
  10. chat.php能定期刷新,php+ajax实现在线刷新,即时通讯,无需mysql数据库!
  11. 程序员如何淡定度过 2.14 情人节?
  12. Java微信公众平台开发(十五)--微信JSSDK的使用
  13. dat关闭某进程_电脑程序卡住怎么办?结束进程只需要这三个键
  14. eclipse运行java快捷键,eclipse常用快捷键
  15. 微信自动选择浏览器打开方式
  16. sikuli和Robotframework集成若干问题(一):TypeError: exists(): 2nd arg can't be coerced to double
  17. 计算机通信网自学笔记(1)
  18. Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
  19. linux内核uuid生成器测试
  20. centos7安装代码雨cmatrix

热门文章

  1. [VMM 2008虚拟化之初体验-1] 准备环境
  2. vue编程式导航,命名路由
  3. PySide: 信号、槽
  4. Java Calendar类知识点总结
  5. 51nod 1693 水群
  6. python编程常见小技巧
  7. JNI_Android项目中调用.so动态库实现详解【转】
  8. c语言词典课程设计报告,C语言课程设计英语词典排版系统
  9. STM32F103:二.(5)控制HC-SR04超声波
  10. 12022.ADS7138采集芯片