Java 8 新特性Lambda 表达式

  • 一、常用循环
  • 二、匿名内部类
  • 三、排序集合
  • 四、循环打印对象
  • 五、根据条件修改
  • 六、排序
  • 七、求和
  • 八、统计方法
  • 九、材料

一、常用循环

public class Spring3 {public static void main(String[] args) {String[] atp = {"yuanGe","daWei","xiaoMing"};List<String> players = Arrays.asList(atp);// 以前的循环方式for (String player : players) {System.out.println(player + "; ");}System.out.println("===================================");// 使用 lambda 表达式以及函数操作(functional operation)players.forEach((player) -> System.out.println(player + "; "));System.out.println("===================================");// 在 Java 8 中使用双冒号操作符(double colon operator)players.forEach(System.out::println);}
}

二、匿名内部类

public class Spring3 {public static void main(String[] args) {// 1.1使用匿名内部类new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Hello world !");}}).start();// 1.2使用 lambda expressionnew Thread(() -> System.out.println("Hello world !")).start();// 2.1使用匿名内部类Runnable race1 = new Runnable() {@Overridepublic void run() {System.out.println("Hello world !");}};// 2.2使用 lambda expressionRunnable race2 = () -> System.out.println("Hello world !");// 直接调用 run 方法(没开新线程哦!)race1.run();race2.run();}
}

三、排序集合

public class Spring3 {public static void main(String[] args) {String[] atp2 = {"Z","B","C"};// 1.1 使用匿名内部类根据 name 排序 playersArrays.sort(atp2, new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {return (s1.compareTo(s2));}});List<String> players2 = Arrays.asList(atp2);players2.forEach(System.out::println);}
}

四、循环打印对象

@AllArgsConstructor//创建带参构造器
@Data//get、set方法,为该类添加equals、canEquals、hashCode、toString方法
@Slf4j//log的Log4J日志对象
public class Person {@NonNull//属性非空private String a;private String b;private String c;private String d;private Integer e;private Integer f;
}public class Spring3 {public static void main(String[] args) {List<Person> javaProgrammers = new ArrayList<Person>() {{add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));}};List<Person> phpProgrammers = new ArrayList<Person>() {{add(new Person("Jarrod", "Pace", "PHP programmer", "male", 34, 1550));add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));add(new Person("Victor", "Channing", "PHP programmer", "male", 32, 1600));add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21, 1000));add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));add(new Person("Rosalind", "Layla", "PHP programmer", "female", 25, 1300));add(new Person("Fraser", "Hewie", "PHP programmer", "male", 36, 1100));add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));add(new Person("Alvin", "Lance", "PHP programmer", "male", 38, 1600));add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));}};javaProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getA(), p.getB()));phpProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getA(), p.getB()));}
}

总结

for(Object o: list) { // 外部迭代System.out.println(o);}
//可以写成:
list.forEach(o -> {System.out.println(o);}); //forEach函数实现内部迭代

五、根据条件修改

filter方法的参数是Predicate类型,forEach方法的参数是Consumer类型,它们都是函数式接口,所以可以使用λ表达式。
将E属性为34的对象将其F属性设置为100

public class Spring3 {public static void main(String[] args) {//将E属性为34的对象将其F属性设置为100phpProgrammers.stream().filter(s -> s.getE() == 34).forEach(s -> s.setF(100));phpProgrammers.forEach(o -> System.out.println(o.toString()));}
}

六、排序

public class Spring3 {public static void main(String[] args) {//根据A列名字排序List<Person> sortedJavaProgrammers = javaProgrammers.stream().sorted((p, p2) -> (p.getA().compareTo(p2.getA()))).limit(5).collect(Collectors.toList());sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getA(), p.getB()));//根据F列数字排序sortedJavaProgrammers = javaProgrammers.stream().sorted((p, p2) -> (p.getF() - p2.getF())).collect(Collectors.toList());sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getA(), p.getB()));}
}

七、求和

上面的例子中我们已经看到 collect 方法是如何工作的。 结合 map 方法,我们可以使用 collect 方法来将我们的结果集放到一个字符串,一个 Set 或一个TreeSet中:

public class Spring3 {public static void main(String[] args) {int totalSalary = javaProgrammers.parallelStream().mapToInt(p -> p.getF()).sum();System.out.println(totalSalary);}
}

八、统计方法

public class Spring3 {public static void main(String[] args) {//计算 count, min, max, sum, and average for numbersList<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();System.out.println("List中最大的数字 : " + stats.getMax());System.out.println("List中最小的数字 : " + stats.getMin());System.out.println("所有数字的总和   : " + stats.getSum());System.out.println("所有数字的平均值 : " + stats.getAverage());}
}

九、材料

本文一共两个用到两个类

import lombok.*;
import lombok.extern.java.Log;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;/*** @author lichangyuan* @create 2021-09-27 16:34*/
@AllArgsConstructor//创建带参构造器
@Data//get、set方法,为该类添加equals、canEquals、hashCode、toString方法
@Slf4j//log的Log4J日志对象
@Log
public class Person {@NonNull//属性非空private String a;private String b;private String c;private String d;private Integer e;private Integer f;
}
import com.example.demo.entity.Person;import java.util.*;
import java.util.stream.Collectors;/*** @author lichangyuan* @create 2021-09-26 16:44*/
public class Spring3 {public static void main(String[] args) {String[] atp = {"yuanGe","daWei","xiaoMing"};List<String> players = Arrays.asList(atp);// 以前的循环方式for (String player : players) {System.out.println(player + "; ");}System.out.println("===================================");// 使用 lambda 表达式以及函数操作(functional operation)players.forEach((player) -> System.out.println(player + "; "));System.out.println("===================================");// 在 Java 8 中使用双冒号操作符(double colon operator)players.forEach(System.out::println);System.out.println("===================================");// 1.1使用匿名内部类new Thread(new Runnable() {@Overridepublic void run() {System.out.println("Hello world !");}}).start();// 1.2使用 lambda expressionnew Thread(() -> System.out.println("Hello world !")).start();// 2.1使用匿名内部类Runnable race1 = new Runnable() {@Overridepublic void run() {System.out.println("Hello world !");}};// 2.2使用 lambda expressionRunnable race2 = () -> System.out.println("Hello world !");// 直接调用 run 方法(没开新线程哦!)race1.run();race2.run();System.out.println("===================================");String[] atp2 = {"Z", "B", "C"};// 1.1 使用匿名内部类根据 name 排序 playersArrays.sort(atp2, new Comparator<String>() {@Overridepublic int compare(String s1, String s2) {return (s1.compareTo(s2));}});List<String> players2 = Arrays.asList(atp2);players2.forEach(System.out::println);System.out.println("===================================");List<Person> javaProgrammers = new ArrayList<Person>() {{add(new Person("Elsdon", "Jaycob", "Java programmer", "male", 43, 2000));add(new Person("Tamsen", "Brittany", "Java programmer", "female", 23, 1500));add(new Person("Floyd", "Donny", "Java programmer", "male", 33, 1800));add(new Person("Sindy", "Jonie", "Java programmer", "female", 32, 1600));add(new Person("Vere", "Hervey", "Java programmer", "male", 22, 1200));add(new Person("Maude", "Jaimie", "Java programmer", "female", 27, 1900));add(new Person("Shawn", "Randall", "Java programmer", "male", 30, 2300));add(new Person("Jayden", "Corrina", "Java programmer", "female", 35, 1700));add(new Person("Palmer", "Dene", "Java programmer", "male", 33, 2000));add(new Person("Addison", "Pam", "Java programmer", "female", 34, 1300));}};List<Person> phpProgrammers = new ArrayList<Person>() {{add(new Person("Jarrod", "Pace", "PHP programmer", "male", 34, 1550));add(new Person("Clarette", "Cicely", "PHP programmer", "female", 23, 1200));add(new Person("Victor", "Channing", "PHP programmer", "male", 32, 1600));add(new Person("Tori", "Sheryl", "PHP programmer", "female", 21, 1000));add(new Person("Osborne", "Shad", "PHP programmer", "male", 32, 1100));add(new Person("Rosalind", "Layla", "PHP programmer", "female", 25, 1300));add(new Person("Fraser", "Hewie", "PHP programmer", "male", 36, 1100));add(new Person("Quinn", "Tamara", "PHP programmer", "female", 21, 1000));add(new Person("Alvin", "Lance", "PHP programmer", "male", 38, 1600));add(new Person("Evonne", "Shari", "PHP programmer", "female", 40, 1800));}};javaProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getA(), p.getB()));phpProgrammers.forEach((p) -> System.out.printf("%s %s; ", p.getA(), p.getB()));System.out.println("===================================");//根据A列名字排序List<Person> sortedJavaProgrammers = javaProgrammers.stream().sorted((p, p2) -> (p.getA().compareTo(p2.getA()))).limit(5).collect(Collectors.toList());sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getA(), p.getB()));//根据F列数字排序sortedJavaProgrammers = javaProgrammers.stream().sorted((p, p2) -> (p.getF() - p2.getF())).collect(Collectors.toList());sortedJavaProgrammers.forEach((p) -> System.out.printf("%s %s; %n", p.getA(), p.getB()));System.out.println("===================================");//将E属性为34的对象将其F属性设置为100phpProgrammers.stream().filter(s -> s.getE() == 34).forEach(s -> s.setF(100));phpProgrammers.forEach(o -> System.out.println(o.toString()));System.out.println("===================================");int totalSalary = javaProgrammers.parallelStream().mapToInt(p -> p.getF()).sum();System.out.println(totalSalary);System.out.println("===================================");//计算 count, min, max, sum, and average for numbersList<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();System.out.println("List中最大的数字 : " + stats.getMax());System.out.println("List中最小的数字 : " + stats.getMin());System.out.println("所有数字的总和   : " + stats.getSum());System.out.println("所有数字的平均值 : " + stats.getAverage());}
}

Java 8 新特性Lambda 表达式相关推荐

  1. Java 8 新特性 lambda表达式

    / Created by Manager on 2021/4/1. Java 8 新特性 lambda表达式 StreamAPI 新日期 新注解 */ 视频连接 1https://www.bilibi ...

  2. 【Java】Java 8 新特性-----Lambda 表达式

    一.Lambda 表达式的主要改进点 Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 ...

  3. java lambda表达式详解_Java8新特性Lambda表达式详解

    课程目标: 通过本课程的学习,详细掌握Java8新特性之Lambda表达式: 适用人群:有Java基础的开发人员: 课程概述:从Java 8出现以来lambda是最重要的特性之一,它可以让我们用简洁流 ...

  4. java新特性lambda表达式快速入门

    文章目录 序 常规写法 写法一:新建类并实现该接口 写法二:使用匿名函数 lambda写法 写法一:lambda常规写法 写法二:lambda简写 中场疑问 lambda的方法引用 写法一 写法二 练 ...

  5. Java8新特性----Lambda表达式详细探讨

    Java8新特性 Lambda表达式 入门演示 案例1 如何解决 cannot be cast to java.lang.Comparable问题? 案例2 优化方式一 : 策略设计模式 优化方式二: ...

  6. C++11新特性——λ(lambda)表达式详解

    C++11新特性--λ(lambda)表达式 C++11中引入了λ表达式,它可以用来定义一个内联(inline)的函数,作为一个本地的对象或者一个参数.有了λ表达式,我们可以很方便的使用stl标准库. ...

  7. java三目表达式_Java8新特性Lambda表达式

    1 Lambda表达式 对于很多计算机语言来说,Lambda表达式并不是陌生的语法格式,而对于Java而言,它的到来比较晚,直到Java8更新之后,Lambda表达式才正式出现在Java语法中.所以如 ...

  8. 【Java】jdk 1.8 新特性——Lambda表达式

    Lambda表达式 jdk 1.8 新加入的特性,简化了简单接口的实现 函数式接口 函数式中只有一个待实现的方法,可以使用@FunctionalInterface注解标注函数式接口.这个接口中只能有一 ...

  9. java thread lambda_Java8新特性--Lambda表达式

    从java8出现以来lambda是最重要的特性之一,它可以让我们用简洁流畅的代码完成一个功能. 很长一段时间java被吐槽是冗余和缺乏函数式编程能力的语言,随着函数式编程的流行java8种也引入了 这 ...

最新文章

  1. ionic4中使用Swiper触屏滑动--技术
  2. Android-Presentation双屏异显-一看就懂篇
  3. 关于rms,打开文档的时候提示您没有权限打开文档,因为您的权限已过期
  4. OprenCV学习之路一:将彩色图片转换成灰度图
  5. iOS 正则表达式使用的三种方式语法
  6. cocos2d-x游戏实例(17)-纵版射击游戏(4)
  7. 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
  8. C/C++中计算函数运行时间
  9. Synchronized 关键字的用法
  10. python中dtype什么意思_浅谈python 中的 type(), dtype(), astype()的区别
  11. 学到了!程序员大神用这招让开发效率直接提升10倍!!
  12. 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
  13. 暖心!阿里安全白帽挖漏洞做公益 连收2462封山区小孩感谢信
  14. 图像处理之基础---ffmpeg 中的图像缩放
  15. ERP库存管理 华夏
  16. unity android gyro,Unity3D手机陀螺仪的使用方法
  17. 信号处理中使用IPP库函数的基本设置
  18. docker 部署nginx 挂载nginx.conf配置文件
  19. cocos2dx-是男人就坚持20s 练手项目
  20. 爬虫笔记:BeautifulSoup详解

热门文章

  1. 临床研究统计分析的要求和报告规范
  2. 尺子英语怎么读计算机英语怎么读,尺子英语怎么读
  3. 卧槽!Pdf转Word用Python轻松搞定!
  4. 计算机文秘,{办公文秘}文秘计算机专业(186页)-原创力文档
  5. d3.js画柱状图超详细教程
  6. 华为软件迁移实践微认证试题库
  7. hpm128无法共享打印_HP M128fn打印机共享后无法打印
  8. 万字多图:搞懂分布式系统缓存设计
  9. UL-1973-2022 储能电池安全标准
  10. Games104笔记---LE1--现代游戏引擎导论