第十章Lambda表达式和Stream流

文章介绍了Java8中的Lambda表达式和StreamAPI。Lambda表达式是函数式接口的简洁实现方式,而StreamAPI提供了一种新的数据处理方式,具有无存储、惰性执行和可消费性等特性,支持filter、map、reduce等聚合操作,可用于高效地处理数据集合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.Lambda

2.Stream流

3.Stream特性

4.Stream创建

5.Stream使用

......bug分析


1.Lambda

在java 8中,lambda表达是有且只有一个抽象方法的接口 (函数式接口) 。(本质使用的,是接口中的 那个抽象方法,使用lambda表达式来实现)

java lambda -> ::


Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
     System.out.println("匿名内部类 线程启动");
}});
t1.start();

//lambda创建
Thread t2 = new Thread(()->System.out.println("线程b启动"));
 t2.start();

2.Stream流

stream()优点

无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

3.Stream特性

  1. Stream(流)是一个来自数据源的元素队列并支持聚合操作 元素是特定类型的对象,形成一个队列。
  2. Java中的Stream并不会存储元素,而是按需计算。 数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。
  3. 聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。 和以前的Collection操作不同, Stream操作还有两个基础的特征:
  4. Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道, 如同流式风格 (fluent style)。 这样做可以对操作进行优化, 比如延迟执行(laziness)和短路( shortcircuiting)。
  5. 内部迭代: 以前对集合遍历都是通过Iterator或者For-Each的方式, 显式的在集合外部进行迭代, 这叫做外部迭代。 Stream提供了内部迭代的方式,

4.Stream创建

//创建List集合
List<Integer> ln = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9,11,12));
//创建Stream流
Stream<Integer> stream = ln.stream();
// 创建一个(并行流)(用于多线程)
Stream<String> parallelStream = list.parallelStream();
//使用Stream静态方法创建
Stream<Integer> ss = Stream.of(1, 2, 3, 4, 5, 6);   
//遍历输出
ss.forEach(System.out::println);


Io流创建Stream
Arrays创建Stream

5.Stream使用

中间操作

filter()方法 过滤 通过Lambda

Stream<Integer> si = Stream.of(1, 2, 3, 4, 5).filter(e->e>3);
System.out.println(si.count()); //输出2

map()方法

//map() 10 20 30 40 50 遍历每个元素,对这个处理并返回覆盖
Stream<Integer> si = Stream.of(1, 2, 3, 4, 5).map(e -> e * 10);

结束操作

count() 方法          返回当前流的元素个数相当于集合中的size()方法,

forEach() 方法         void forEach(Consumer action);

Stream<Integer> sss = Stream.of(1, 2, 3, 4, 5, 6);
        sss.forEach(System.out::println);

合用方法

List<Integer> ln = new ArrayList<>(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9,11,12));
Stream<Integer> stream = ln.stream();
stream.map(i -> i*i ).filter(a -> a<100).forEach(System.out::println);

......bug分析

  // str.filter(a -> a<5).forEach(e -> System.out.println(e));
       // str.filter(a -> a<5 );
       // str.forEach(System.out::println);

//filter 返回一个新流 中间操作,每次返回一个新的流,可以有多个。
Stream<Integer> stream1 = str.filter(a -> a < 5);

stream1.forEach(System.out::println);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值