前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Lambda表达式及Stream流式处理

Lambda表达式及Stream流式处理

作者头像
Breeze.
发布2022-06-05 12:17:02
6150
发布2022-06-05 12:17:02
举报

什么是Lambda表达式

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

实例讲解Lambda语法

image-20220527153450445
image-20220527153450445
代码语言: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()方法进行逻辑判断
image-20220530130526198
image-20220530130526198
image-20220530140032241
image-20220530140032241

Stream流式处理

  • Stream流式处理是建立在Lambda基础上的多数据处理技术
  • Stream对集合数据处理进行高度抽象,极大简化代码量
  • Stream可对集合进行迭代,去重,筛选,排序,聚合等一系列处理
image-20220530141743032
image-20220530141743032
  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));
}
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Lambda表达式
  • 实例讲解Lambda语法
  • 基于Lambda实现函数式编程
  • Stream流式处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com