一:Lambada表达式的结构

1)Lambada表达式的结构我们可以看成三部分 () -> {},箭头左边是参数,右边是执行体,箭头是格式

二:使用案例(List为主的操作)

1)实体对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {private String idCard;private String name;private int age;private int sex;
}

2)案例数据准备

public class LambadaTest {public static void main(String[] args) {List<Student> list = new ArrayList();             //此处要加泛型,后面过滤时要使用get方法list.add(new Student("1001","张三",18,0));list.add(new Student("1002","李四",19,1));list.add(new Student("1003","王五",20,1));list.add(new Student("1004","王小二",21,0));list.add(new Student("1005","李处",22,1));}
}

3)forEach的使用(::说明:前面是对象的类型,后面是方法,表示的是方法的调用)遍历

list.forEach(System.out::println);                                //简写
list.forEach((student)->System.out.println(student));       //套公式

打印结果

Student(idCard=1001, name=张三, age=18, sex=0)
Student(idCard=1002, name=李四, age=19, sex=1)
Student(idCard=1003, name=王五, age=20, sex=1)
Student(idCard=1004, name=王小二, age=21, sex=0)
Student(idCard=1005, name=李处, age=22, sex=1)

4)filter的使用(过滤)

List<Student> students = list.stream().filter((student) -> student.getAge() > 20).filter(student -> student.getSex()==1).collect(Collectors.toList());   //过滤两种条件
System.err.println(students);

打印结果

[Student(idCard=1005, name=李处, age=22, sex=1)]

5)limit的用法(取出前面几个值)

List<Student> students = list.stream().limit(4).collect(Collectors.toList());System.err.println(students);

打印结果

[Student(idCard=1001, name=张三, age=18, sex=0), Student(idCard=1002, name=李四, age=19, sex=1), Student(idCard=1003, name=王五, age=20, sex=1), Student(idCard=1004, name=王小二, age=21, sex=0)]

6)skip的用法(跳过前面的几个值)

List<Student> students = list.stream().skip(2).collect(Collectors.toList());System.err.println(students);

打印结果

[Student(idCard=1003, name=王五, age=20, sex=1), Student(idCard=1004, name=王小二, age=21, sex=0), Student(idCard=1005, name=李处, age=22, sex=1)]

7)取出某一属性的集合(map的使用)(两种方式都可以返回同样结果)

List<String> students = list.stream().map(**Student::getIdCard**).collect(Collectors.toList());  //此处泛型的类型要匹配返回的集合类型
List<String> students = list.stream().map(**student->student.getIdCard()**).collect(Collectors.toList());System.err.println(students);

返回结果

[1001, 1002, 1003, 1004, 1005]

8)reduce的使用(计算之和)(过滤条件中不能使用::)

 Integer count = list.stream().map(Student::getAge).reduce(Integer::sum).orElse(0);Integer integer = list.stream().filter(student -> student.getAge() > 20).map(Student::getAge).reduce(Integer::sum).orElse(0);   //过滤之后使用计算 System.err.println(count);System.err.println(integer);

打印结果

100
43

9)maxBy(取出最大的)

 Student student = list.stream().collect(Collectors.maxBy(Comparator.comparing(Student::getAge))).orElse(null);System.err.println(student);

打印结果

Student(idCard=1005, name=李处, age=22, sex=1)

10)averagingDouble(计算平均值)

 Double collect = list.stream().collect(Collectors.averagingDouble(Student::getAge));System.err.println(collect);

打印结果

20.0

11)toMap的用法:list转为map集合

Map<String, String> collect = list.stream().collect(Collectors.toMap(Student::getIdCard, Student::getName));System.err.println(collect);

打印结果

{1005=李处, 1004=王小二, 1003=王五, 1002=李四, 1001=张三}

12)sorted 排序

List<Student> collect = list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList());System.err.println(collect);

打印结果

[Student(idCard=1001, name=张三, age=18, sex=0), Student(idCard=1002, name=李四, age=19, sex=1), Student(idCard=1003, name=王五, age=20, sex=1), Student(idCard=1004, name=王小二, age=21, sex=0), Student(idCard=1005, name=李处, age=22, sex=1)]

13)count的用法(集合的个数)

long count = list.stream().count();System.err.println(count);     //5

14)allMatch的用法(全部都是,返回的布尔值)

boolean b = list.stream().allMatch(student -> student.getSex() == 0);System.err.println(b);    //false

三:使用案例2(Map为主的操作)

1)数据准备

public class LambadaTest {public static void main(String[] args) {Map<String, Object> map = new HashMap<>();map.put("A","100");map.put("B","101");map.put("C","102");map.put("D","103");map.put("E","104");map.put("F","105");}
}

2)取值

//未使用Lambada前
Set<String> set = map.keySet();for (String str:set) {Object o = map.get(str);System.err.println(str);System.err.println(o);}//使用之后map.forEach((k,v)-> {System.err.println(k);System.err.println(v);});

打印结果一致

100
A
101
B
102
C
103
D
104
E
105
F

四:扩展(集合与集合之间赋值)

1)数据准备(增加Student2 类)

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student2 {private String idCard;private String name;
}

2)未使用Lambada和使用的方式

//未使用Lambada表达式
ArrayList<Student2> student2s = new ArrayList<>();for (Student student: list) {Student2 student2 = new Student2();student2.setName(student.getName());student2.setIdCard(student.getIdCard());student2s.add(student2);}System.err.println(student2s);//使用Lambada表达式
List<Student2> collect = list.stream().map(student -> {Student2 student2 = new Student2();//BeanUtils.copyProperties(student,student2);    //这一步可以使用工具类替换赋值student2.setName(student.getName());student2.setIdCard(student.getIdCard());return student2;}).collect(Collectors.toList());System.err.println(collect);

打印结果一致

[Student2(idCard=1001, name=张三), Student2(idCard=1002, name=李四), Student2(idCard=1003, name=王五), Student2(idCard=1004, name=王小二), Student2(idCard=1005, name=李处)]

Lambada表达式常用案例(技能题)相关推荐

  1. 【系统分析师之路】系统分析师下午案例模拟题(2021版)

    [系统分析师之路]系统分析师下午案例模拟题(2021版) 系统分析师下午案例分析模拟题 [系统分析师之路]系统分析师下午案例模拟题(2021版) 系统分析师下午案例模拟题一 系统分析师下午案例模拟题二 ...

  2. 2.cocos2dx 3.2中语法的不同之处,lambada表达式的使用和function和bind函数的使用

    1        打开建好的T32  Cocos2dx-3.2的一个项目 2        设置Cocos显示窗口的位置是在AppDelegate.cpp中: 3  设置自适应窗口大小的代码是在上面的 ...

  3. lambada表达式

     lambda表达式 //C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作.Lambda的语法形式如下: //[函数对象参数](操作符重载函数参数)mutable或e ...

  4. 系统集成项目管理工程师2021年下半年下午案例分析题及答案

    本系列文章将会对系统集成项目管理工程师考试中出现的各类案例分析题进行汇总解析,并给出分析过程,帮助考生备考复习. 更多复习内容请在微信搜索小程序 "系统集成项目管理工程师高频考点" ...

  5. lambada表达式总结

    前言 作为jdk1.8的新特性,8的标准库都开始大量使用lambda表达式了,你有什么理由不去学习lambda,这么简洁,这么爽的一种编程方法,不学不觉得可惜吗? lambda即λ,是匿名函数的意思, ...

  6. Lambada表达式的用法

    Lambada表达式是JDK1.8中最重要的新功能之一.使用Lambada表达式可以替代只有一个抽象函数的接口实现,告别匿名内部类.代码看起来更简洁易懂.Lambada表达式同时还提升了对集合.框架的 ...

  7. lambada表达式理解

    lambada表达式是替换匿名内部类的函数式接口实现类 函数式接口 只有一个抽象方法的接口(可以有默认方法和静态方法),通常带有@FunctionalInterface注解 常用函数式接口 Predi ...

  8. 系统集成项目管理工程师2018年上半年下午案例分析题及答案

    本系列文章将会对系统集成项目管理工程师考试中出现的各类案例分析题进行汇总解析,并给出分析过程,帮助考生备考复习. 更多复习内容请在微信搜索小程序 "系统集成项目管理工程师高频考点" ...

  9. java日期时间库-常用案例-不保留全分享

    java日期时间库-常用案例-不保留全分享 除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使 ...

最新文章

  1. ADO.NET与ORM的比较(5):MyBatis实现CRUD
  2. Java与UML交互图
  3. Spring导入配置类或文件
  4. 用集合java字符串第一个单词_Java小程序 输入一个字符串,将每一个单词首字母大写...
  5. 报错记录:SprintBoot---Unable to start embedded container; nested exception is java.lang……
  6. Ubuntu中如何使用root用户
  7. docker centos7_centos7-yum部署docker
  8. 3dContactPointAnnotationTool开发日志(三三)
  9. JavaScript入门(part1)--初识JavaScript
  10. 使用 .NET CORE 创建 项目模板,模板项目,Template
  11. python商品总价_【Python基础 | 列表】小实验:实现显示商品,选择商品,将商品加入购物车,得到总价格...
  12. 【机器学习】高斯过程python包安装过程
  13. 多线程资源共享之同步锁
  14. TypeScript算法专题 - blog9 - 单链表统计 : 返回指定值在单链表结点中的出现次数
  15. create user 'root'@'localhost' identified by 。。。
  16. 基于行为树的高级游戏AI教程
  17. (四)Selenium通过谷歌插件实现使用隧道代理
  18. SEO博客外链怎么做?现在的话是注重站内内容还是什么?
  19. 一本通1325:【例7.4】 循环比赛日程表
  20. 高仿富途牛牛-组件化(六)-炒鸡牛逼的布局记忆功能(序列化和反序列化)

热门文章

  1. IE不能下载MSG文件的解决方案
  2. nn.Bilinear讲解
  3. 易语言零基础新手入门系列教程 第一课
  4. grid_map(五):grid_map函数定义、类型定义学习
  5. [笔记]深入解析Windows操作系统《三》系统机制
  6. 从CRUD到自身架构师的蜕变之路?全靠这份:Java中高级核心知识全面解析
  7. strcmp函数的说明和使用
  8. 面试自我介绍注意哪些
  9. css梯形 transform和动画
  10. php控制梯形图,plc控制交通灯梯形图设计实例论文