一、为什么使用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的简单使用的更多相关文章

  1. Java8新特性-Lambda表达式是什么?

    目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...

  2. 乐字节-Java8新特性-Lambda表达式

    上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...

  3. java8新特性——Lambda表达式

    上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...

  4. Java8新特性 - Lambda表达式 - 基本知识

    A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...

  5. Java8新特性第3章(Stream API)

    Stream作为Java8的新特性之一,他与Java IO包中的InputStream和OutputStream完全不是一个概念.Java8中的Stream是对集合功能的一种增强,主要用于对集合对象进 ...

  6. Java8 新特性2——强大的Stream API

    强大的Stream API Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作.简而言之,Stream API 提供 ...

  7. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  8. Java8 新特性lambda表达式(一)初始

    本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...

  9. Java8新特性——Lambda 表达式

    Lambda 表达式 ​ ​ ​ ​ ​ ​ ​ ​ Lambda 表达式的实质属于函数式编程. ​ ​ ​ ​ ​ ​ ​ ​ 语法格式为:(parameters) -> expression ...

随机推荐

  1. 手机app后台初学

    初学者一看到接口就想到 不是interface.,但是这里不是,这里就是一个URL,app给这个URL传递参数,然后URL返回数据给APP,然后APP就能和服务端联动提供动态数据 举个最简单的例子,用 ...

  2. SpringCloud教程 | 第十篇: 高可用的服务注册中心

    版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 ,博主地址:http://blog.csdn.net/forezp. http://blog.csdn.net/forezp/art ...

  3. react antd layout sider

    import React from 'react'; import {Link, withRouter} from 'react-router-dom'; import {Layout, Menu, ...

  4. python学习之面向对象(上)

    定义了一个Animal类,该类包括了构造函数,私有方法,公有方法,静态方法,属性的方问等 双下划线"__"组成了私有成员的定义约束,其它情况则为公有成员 #_metaclass_= ...

  5. Hoeffding inequality

    Hoeffding公式为 \epsilon]\leq{2e^{-2\epsilon^2N}}"> 如果把Training error和Test error分别看成和的话,Hoeffdi ...

  6. IOS Quartz 2D 学习(1)

    IOS提供两种创建图形的途径: 1.OpenGL. 2.Quartz.Core Animation.UIKit图形支持. UIKit的图形系统 1.视图绘画周期: DrawRect方法,在任何时候,当 ...

  7. Java 开发手册之编程规约

    一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / n ...

  8. Redis、Memcache和MongoDB

    一.Memcached Memcached的优点:Memcached可以利用多核优势,单实例吞吐量极高,可以达到几十万QPS(取决于key.value的字节大小以及服务器硬件性能,日常环境中QPS高峰 ...

  9. bzoj 2555 SubString——后缀自动机+LCT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2555 要维护 right 集合的大小.因为 fa 会变,且 fa 构成一棵树,所以考虑用 L ...

  10. selenium - 控制浏览器窗口的大小和浏览器最大化

    1.控制浏览器大小 有些前端的页面需要查看在不同像素下的兼容情况,比如把像素设置为 480*800,然后截图看看页面显示有没有问题 WebDriver 提供了 set_windows_size() 方 ...