一、为什么使用lambda

  Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

package com.duchong.java8;

/**
* @author DUCHONG
* @since 2019-01-02 15:00
**/
public class LambdaTest2 { public static void main(String[] args) { //原写法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("run ----hello lambda");
}
}).start();
//lambda表达式写法
new Thread(()-> System.out.println("run2 ----hello lambda")).start();
}
}

二、lambda语法

  Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 "->", 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为两个部分:

  • 左侧:指定了 Lambda 表达式需要的所有参数
  • 右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

三、引用

3.1、方法引用

3.2、构造器引用

3.3、数组引用

四、stream API简单使用

  包名:java.util.stream .*

需求:查询出集合中薪水大于5000 的员工。

Employee.java

package com.duchong.java8;

public class Employee {

    private String name;
private int age;
private char gender;
private double salary; public Employee() {
} public Employee(String name, int age, char gender, double salary) {
this.name = name;
this.age = age;
this.gender = gender;
this.salary = salary;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public char getGender() {
return gender;
} public void setGender(char gender) {
this.gender = gender;
} public double getSalary() {
return salary;
} public void setSalary(double salary) {
this.salary = salary;
} @Override
public String toString() {
return "Employee [name=" + name + ", age=" + age + ", gender=" + gender
+ ", salary=" + salary + "]";
} }

main

package com.duchong.java8;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors; /**
* @author DUCHONG
* @since 2019-01-02 15:00
**/
public class LambdaTest2 { public static void main(String[] args) { List<Employee> employees = Arrays.asList(
new Employee("duchong", 18, '男', 0),
new Employee("duchong", 17, '男', 0),
new Employee("duchong1", 20, '女', 5000),
new Employee("duchong2", 18, '女', 8000),
new Employee("duchong3", 22, '男', 9000),
new Employee("duchong4", 30, '男', 11000)
); //过滤大于5000
employees.stream()
.filter((e) -> e.getSalary() >= 5000)
.forEach(System.out::println); System.out.println("---------------------------------------");
//获取名称 不去重
employees.stream()
.map(Employee::getName)
.forEach(System.out::println);
//获取名称 去重
System.out.println("---------------------------------------");
employees.stream()
.map(Employee::getName)
.distinct()
.forEach(System.out::println); //获取唯一性的Name列表
List<String> employeeList=employees.stream()
.map(Employee::getName)
.distinct()
.collect(Collectors.toList());
}
}

结果:

最新文章

  1. 在Android中实现service动态更新UI界面
  2. 经典SQL语句大全以及50个常用的sql语句
  3. [ucgui] 对话框1——创建对话框
  4. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)
  5. Asp.net MVC Global.asax文件
  6. 表格table样式布局设置
  7. PullToRefreshGridView上拉加载、下拉刷新
  8. Verilog中变量位宽注意
  9. CodeForces 820C
  10. 安装python--环境配置
  11. Java数据类型Stack栈、Queue队列、数组队列和循环队列的比较
  12. js 高阶函数(map/reduce/filter/sort)
  13. Latex:多个公式使用同一个编号(右对齐)
  14. ios 确定文字所占矩形框大小
  15. python的str()字符串类型的方法详解
  16. Python量化教程 常用函数
  17. 从装饰者模式的理解说JAVA的IO包
  18. CXF动态调用wsdl接口
  19. MySQL引擎及选择
  20. 大数据学习路线copy自淘宝

热门文章

  1. NSSet基本使用
  2. UI- Layer的使用总结(附动画)
  3. 关于bind named.conf.options
  4. [Mvel]Mvel2.0使用指南一 基础
  5. Linux多进程多线程例子
  6. Anaconda 使用conda常用命令
  7. (转)在二元树中找出和为某一值的所有路径,java版本
  8. Spring、Spring MVC、MyBatis整合文件配置详解2
  9. (7)Stream简介
  10. 73个word使用终极技巧