java8新特性-lambda表达式和stream API的简单使用
一、为什么使用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());
}
}
结果:

java8新特性-lambda表达式和stream API的简单使用的更多相关文章
- Java8新特性-Lambda表达式是什么?
目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...
- 乐字节-Java8新特性-Lambda表达式
上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...
- java8新特性——Lambda表达式
上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...
- Java8新特性 - Lambda表达式 - 基本知识
A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...
- Java8新特性第3章(Stream API)
Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStream完全不是一个概念.Java8中的Stream是对集合功能的一种增强,主要用于对集合对象进 ...
- Java8 新特性2——强大的Stream API
强大的Stream API Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.简而言之,Stream API 提供 ...
- Java8新特性: lambda 表达式介绍
一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...
- Java8 新特性lambda表达式(一)初始
本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...
- Java8新特性——Lambda 表达式
Lambda 表达式 Lambda 表达式的实质属于函数式编程. 语法格式为:(parameters) -> expression ...
随机推荐
- Hibernate中Hql查询
这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...
- Codeforces Round #394 (Div. 2) D. Dasha and Very Difficult Problem
D. Dasha and Very Difficult Problem time limit per test:2 seconds memory limit per test:256 megabyte ...
- LeetCode OJ:Pascal's Triangle(帕斯卡三角)
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...
- struct 字节对齐详解
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问, ...
- 旧书重温:0day2【5】shellcode变形记
紧接上一篇,结合第一篇 //这篇文章主要成功溢出一个带有缓冲区溢出的小程序,其中我们的shellcode被strcpy截断了所以我们需要变形shellcode,这个实验中也出现了很多意想不到的拦路虎, ...
- 使用macbook破解WPA/WPA2 wifi密码
文本仅供学习交流. 我使用的系统是macbook pro 15: 安装aircrack-ng 使用homebrew安装,命令: brew install aircrack-ng 抓包-抓取带密码的握手 ...
- xcode加载静态链接库.a文件总是失败
明明项目是对的,代码没有问题,并且把项目作为库项目引入到新项目中没问题,可是一旦把项目编译出.a文件,引入到新项目中不知为何会有几率出现一大堆错误,其实是xcode的缓存机制在作怪,去这个目录: /U ...
- Set Matrix Zeros
Question: Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in pla ...
- 如何加快MyEclipse的启动速度
学习java开发的朋友对Myeclipse应该不陌生,MyEclipse企业级工作平台(MyEclipseEnterprise Workbench ,简称MyEclipse)是对EclipseIDE的 ...
- springboot 自定义属性
前言 spring boot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们如何添加呢 1.添加自定义属性 在src/main/resources/a ...