一、为什么使用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() {@Overridepublic 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;}@Overridepublic 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());}
}

结果:

转载于:https://www.cnblogs.com/geekdc/p/10208877.html

java8新特性-lambda表达式和stream API的简单使用相关推荐

  1. 【Java】Java8新特性Lambda表达式和Stream API

    Lambda表达式是实现支持函数式编程技术的基础. 函数式编程与面向对象编程:函数式编程将程序代码看作数学中的函数,函数本身作为另一个函数参数或返回值,即高阶函数.而面向对象编程按照真实世界客观事物的 ...

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

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

  3. java8新特性-lambda表达式入门学习

    定义 jdk8发布新特性中,lambda是一大亮点之一.lambda表达式能够简化我们对数据的操作,减少代码量,大大提升我们的开发效率.Lambda 表达式"(lambda expressi ...

  4. java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量

    一提到java是一种什么语言? 大多数人肯定异口同声的说是一门面向对象的语言,这种观点从我们开始学java就已经根深蒂固了,但是学到java8新特性函数式编程的时候,我才知道java并不是纯面向对象的 ...

  5. Java8 新特性 -- Lambda表达式:函数式接口、方法的默认实现和静态方法、方法引用、注解、类型推测、Optional类、Stream类、调用JavaScript、Base64

    文章目录 1. Lambda表达式 1.1 Lambda表达式语法 1.2 Lambda表达式示例 1.3 说明:函数式接口 2. 方法的默认实现和静态方法 3. 方法引用 3.1 方法引用示例 4. ...

  6. Java8新特性——lambda表达式

    什么是lambda表达式? Lambda 表达式是Java 8 的新特性,是一种新的编程语法.lambda语义简洁明了,性能良好,是Java 8 的一大亮点.废话不多说,我们来看个例子. 从内部类到l ...

  7. jdk1.8新特性 Lambda表达式和Stream集合操作(详细)

    Lambda表达式 ① 语法 lambda表达式 ,是JDK1.8新增的特性 使用新的运算符 -> (转到.称为) lambda表达式的组成 第1部分: (参数) 第2部分: -> 第3部 ...

  8. java8新特性lambda表达式概述

    定义 ​ jdk8发布新特性中,lambda是一大亮点之一.lambda表达式能够简化我们对数据的操作,减少代码量,大大提升我们的开发效率.Lambda 表达式"(lambda expres ...

  9. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

最新文章

  1. 亿级流量场景下如何为HTTP接口限流?看完我懂了!!
  2. ML之xgboost:利用xgboost算法(sklearn+GridSearchCV)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  3. 【Python基础】使用列表、字典和集合生成式来缩短代码
  4. 6174问题 --ACM解决方法
  5. python获取路由器数据包pppoe_PPPoE协议***4:如何得到PPPoE服务器的mac地址
  6. Berkeley DB作用
  7. C#下实现的基础K-MEANS多维聚类
  8. py3+urllib+re,爬虫下载捧腹网图片
  9. 无线传感器网络复习大纲
  10. WBS和TASK的区别?
  11. 掩膜裁剪tif步骤_ENVI中掩膜掩膜操作及影像分类教程
  12. HYSPLIT模型后向轨迹制作
  13. mysql中rownumber用法_MySQL中row_number的实现
  14. Minifilter中 Filter Initiated I/O(过滤器自产生I/O)
  15. 依图科技CTO颜水成被曝离职,或转战东南亚独角兽Shopee
  16. 出版一本书可以赚多少钱_今年出版5本书
  17. 平面直角坐标系中的旋转公式_中考难点,旋转+动点的最值问题的构建
  18. cpp简单实现一下RNN神经网络
  19. 复旦女博士被“送”5篇论文后要分手,代写情夫自杀?复旦大学深夜回应!
  20. 分析器错误消息: 无法执行程序。所执行的命令为 C:\Windows\Microsoft.NET\Framework\v4.0 \csc.exe/noconfig/fullpaths@C:\W

热门文章

  1. 通过超图在网页中加载3dmax模型
  2. Java Web 三大框架开发资料
  3. Hibernate调用存储过程
  4. 【洛谷p1058】立体图(已完结)
  5. 南邮 AAencode
  6. QT中显示gif图片方法
  7. 牛客网——10进制 VS 2进制
  8. jsencrypt加密
  9. 游戏服某个服外网玩家连不上,内网才能连
  10. (笔记)Mysql命令grant on:增加新用户并控制其权限