技术总结 | Java 8 新特性 Lambda表达式及流使用总结

Lambda 表达式

  1. Lambda 表达式语法

Lambda 表达式语法包含三个部分:

  • 参数列表:函数的入参。
  • 箭头:把参数列表和 Lambda 主体分开。
  • Lambda 主体:函数主要实现的功能
(String s1,String s2) -> s1.length().compareTo(s2.length());

其中,(String s1,String s2)为参数列表,s1.length().compareTo(s2.length());为Lambda主体。

Lambda 表达式的基本语法:

(parameters) -> expression
// 或者(请注意花括号)
(parameters) -> {statements;}
  1. Lambdas及函数式接口的例子
使用案例 Lambdas例子 对应的函数式接口
boolean 表达式 List list -> list.isEmpty() Predicate>
创建对象 () -> new Apple(10) Supplier
消费对象 (Apple a) -> System.out.println(a.getWeight()) Consumer
从一个对象中提取 (String s) -> s.length() Function
  1. 方法引用
    Lambda 及其等效方法方法引用示例
Lambda 等效引用方法
(Apple a) -> a.getWeight() Apple::getWeight
() -> Thread.currentThread().dumpStack Thread.currentThread::dumpStack
(String s) -> System.out.println(s) System.out::println

Java8 引入流

  1. 流是什么

流是Java API的新成员,它允许你以声明的方式处理数据集合。可以把它们看作是遍历数据集的高级迭代器。

流使用样例:

List names = menu.stream()
                         .filter(d -> d.getCalories() > 300)
                         .map(Dish::getName)
                         .limit(3)
                         .collect(toList());

该表达式的含义:过滤卡路里大于 300 的三盘菜

  1. 如何使用流
    流的使用一般包含三件事
  • 一个数据源。
  • 中间操作,形成一个流的流水线
  • 一个终端,生成结果。
  1. 流的中间操作
操作 类型 返回类型 操作函数 函数描述符
filter 中间 Stream Predicate T -> boolean
map 中间 Stram Function T -> R
limit 中间 Stream
sort 中间 Steam Comparator (T,T) -> int
distinct 中间 Steam
  1. 流的终端操作
操作 类型 目的
forEach 终端 消费流中的每一个元素并对其应用 Lambda,该操作返回 void
count 终端 返回流中的个数,该操作返回 long
collect 终端 把流归约成一个集合,如 List、Map甚至是 Integer
  1. map使用

返回集合中每个字段的长度:

List words = Arrays.asList("Hello","Word","Java 8","Lambdas","Actions");
List wordLengths = words.stream().map(String::length).collect(Collectors.toList());
  1. 匹配
    数据是否匹配条件
// 是否都匹配
boolean isHealthy =  menu.stream().allMatch(d -> d.getCalories <1000);
// 确保没有匹配
boolean isHealthy = menu.stream().noneMatch(d -> d.getCalories>=1000);
  1. 计数
long count = list.stream().filter(s -> s.equals("A")).count();
  1. 取交集
List updateData = param.stram().filter(all::contains).collect(Collectors.toList());

其中,all:["aaa","bbb", "ccc", "ddd", "eee"] ,param:["aaa", "ccc", "fff"]

  1. 取param的非交集
  List add = param.stream().filter(s ->!all.contains(s)).collect(Collectors.toList());

你可能感兴趣的:(技术总结 | Java 8 新特性 Lambda表达式及流使用总结)