Lambda表达式及Stream流式处理

2022-06-05 12:17:02 浏览数 (1)

什么是Lambda表达式

  • JDK8开始支持Lambda表达式,用来让程序编写更优雅
  • 利用Lambda可以更简洁的实现匿名内部类与函数声明与调用
  • 基于Lambda提供stream流式处理极大简化对集合的操作

实例讲解Lambda语法

代码语言:javascript复制
(参数列表) -> 实现语句
  1. Lambda 标准使用方式
代码语言:javascript复制
Object obj = (Integer a, Integer b) -> {
    return a b 0f;
}
System.out.println(obj.operate(1, 2));
  1. Lambda允许忽略参数类型
代码语言:javascript复制
Object obj = (a, b) -> {
    return a b 0f;
}
System.out.println(obj.operate(3, 4));
  1. 单行实现代码可以省略大括号和return
代码语言:javascript复制
Object obj = (a, b) -> a * b   0f;
System.out.println(obj.operate(3, 5));
约束条件
  • Lambda 表达式只能实现有且只有一个抽象方法的接口,Java称为“函数式接口”。

基于Lambda实现函数式编程

  1. 函数式编程理念是将代码作为可重用数据代入到程序运行中
  2. 函数式编程强调"你想做什么",而不是"你想怎么做"
  3. JDK8后提供了一系列新的函数式接口,位于java.util.function
Predicate
  • Predicate是新增的函数式接口,位于java.util.function
  • Predicate用于测试传入数据是否满足判断要求
  • Predicate接口需要实现test()方法进行逻辑判断

Stream流式处理

  • Stream流式处理是建立在Lambda基础上的多数据处理技术
  • Stream对集合数据处理进行高度抽象,极大简化代码量
  • Stream可对集合进行迭代,去重,筛选,排序,聚合等一系列处理
  1. 基于数组创建
代码语言:javascript复制
public void generator1() {
    String[] arr = {"Lily", "Andy", "Jackson", "Smith"};
    Stream<String> stream = Stream.of(arr);
    stream.forEach(s -> System.out.println(s));
}
  1. 基于集合创建
代码语言:javascript复制
public void generator2() {
    List<String> list = new ArrayList<>();
    list.add("Lily");
    list.add("Andy");
    list.add("Jackson");
    list.add("Smith");
    Stream<String> stream = list.stream();
    stream.forEach(s -> System.out.println(s));
}
  1. 利用generator创建无线长度流
代码语言:javascript复制
public void generator3() {
    Stream<Integer> stream = Stream.generate(() -> new Random().nextInt(10000));
    stream.limit(10).forEach(i -> System.out.println(i));
}
  1. 基于迭代器创建流
代码语言:javascript复制
public void generator4() {
    Stream<Integer> stream = Stream.iterate(1, n -> n   1);
    stream.limit(100).forEach(s -> System.out.println(s));
}
  1. 基于字符串系列创建流
代码语言:javascript复制
public void generator5() {
    String str = "abcdefg哈喽";
    IntStream stream =str.chars();
    stream.forEach(c -> System.out.println((char)c));
}

0 人点赞