【触手可及】01-stream的基础使用及基本原理

简介: stream基础向,如果已经很熟了就忽略这篇文章

【触手可及】01-stream的基础使用及基本原理

欢迎关注b站账号/公众号【六边形战士夏宁】,一个要把各项指标拉满的男人。该文章已在 github目录收录。
屏幕前的 大帅比大漂亮如果有帮助到你的话请顺手点个赞、加个收藏这对我真的很重要。别下次一定了,都不关注上哪下次一定。

1.背景介绍

stream基础向,如果已经很熟了就忽略这篇文章,可以看stream进阶使用

2.基础概念及基础原理介绍

操作分类

    中间操作(有状态的需要临时迭代再进行下一步,无状态不需要)
        无状态(整体链表结构保证其只循环一次):unordered()、filter()、 map()、 mapToInt() 、mapToLong() 、mapToDouble()、 flatMap() 、flatMapToInt()、 flatMapToLong()、 flatMapToDouble()、 peek()
        有状态:distinct()、 sorted() 、sorted()、 limit()、 skip()
    结束操作
        非短路操作(循环全部):forEach() 、forEachOrdered() 、toArray()、 reduce()、 collect()、 max() 、min() 、count()
        短路操作(匹配到直接结束流):anyMatch() 、allMatch() 、noneMatch()、findFirst()、findAny()

3.拉姆达表达式和匿名内部类

以相对熟悉的runnable接口为例

Thread thread = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println(1);
    }
});

可以简写成如下一行代码,其关键在于Runnable下只有一个方法,所以jvm可以推断出找的就是run方法

Thread thread = new Thread(() -> System.out.println(1));

4.::写法和拉姆达表达式

使用方法 对应lambda表达式
object::instanceMethod (a,b,.....)->特定对象.实例方法(a,b....)
Class::staticMethod (a,b,.....)->类名.类方法(a,b....)
Class::instanceMethod (a,b,.....)->a.实例方法(b....)
Class::new (a,b,.....)->new 类名(a,b....)

4.1::情景1

StreamExample streamExample = new StreamExample();
Stream.of("1", "2", "3", "4").forEach(s -> streamExample.test(s));

等同于如下方法

StreamExample streamExample = new StreamExample();
Stream.of("1", "2", "3", "4").forEach(streamExample::test);

4.2::情景2

Stream.of(1, 2, 3, 4).forEach(s -> StreamExample.staticTest(s));

等同于如下方法

Stream.of(1, 2, 3, 4).forEach(StreamExample::staticTest);

4.3::情景3

Stream.of(new StreamExample(), new StreamExample()).forEach(s -> s.test());

等同于

Stream.of(new StreamExample(), new StreamExample()).forEach(StreamExample::test);

4.4::情景4

Stream.of("1", "2", "3", "4").forEach(s -> new String(s));

等同于

Stream.of("1", "2", "3", "4").forEach(String::new);

5.stream的基础写法

static void mainExample() {
    List<StreamTestExample> collectStreamTestExample = IntStream.range(0, 6).mapToObj(s -> new StreamTestExample(s, String.valueOf(s))).collect(Collectors.toList());
    System.out.println("filter");
    System.out.println(Stream.of(1, 2, 3, 4, 5).filter(s -> s > 3).count());
    System.out.println(collectStreamTestExample.stream().filter(s -> s.getAge() > 3).collect(Collectors.toList()));
    System.out.println("distinct");
    System.out.println(Stream.of(1, 1, 2).distinct().collect(Collectors.toList()));
    System.out.println("sorted");
    System.out.println(Stream.of(1, 2, 12, 7, 9).sorted().collect(Collectors.toList()));
    System.out.println(Stream.of(1, 2, 12, 7, 9).sorted((a, b) -> b - a).collect(Collectors.toList()));
    System.out.println("skip&limit");
    List<Integer> list = Stream.of(1, 2, 3, 4, 5).collect(Collectors.toList());
    int pageNum = 2;
    int pageSize = 3;
    System.out.println(list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList()));

    // anyMatch 判断集合中的元素是否至少有一个满足某个条件
    System.out.println("anyMatch");
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).anyMatch(s -> s > 3));
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).anyMatch(s -> s > 10));

    // allMatch 判断集合中的元素是否都满足某个条件
    System.out.println("allMatch");
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).allMatch(s -> s > 3));
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).allMatch(s -> s > 0));

    // noneMatch 判断集合中的元素是否都不满足某个条件
    System.out.println("noneMatch");
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).noneMatch(s -> s > 3));
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).noneMatch(s -> s < 0));

    // findAny 快速获取一个通常第一个
    System.out.println("findAny");
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).findAny().get());

    System.out.println("findFirst");
    System.out.println(Stream.of(1, 2, 1, 3, 2, 5).findFirst().get());

    //对numbers中的元素求和 16
    System.out.println(Arrays.asList(1, 2, 1, 3, 3, 2, 4)
            .stream()
            .reduce(0, Integer::sum));
    //求集合中的最大值
    Arrays.asList(1,2,1,3,2,5)
            .stream()
            .reduce(Integer::max)
            .ifPresent(System.out::println);
}
filter
2
[StreamExample.StreamTestExample(super=com.example.demo.lesson.greenhand.StreamExample$StreamTestExample@eb9, age=4, name=4), StreamExample.StreamTestExample(super=com.example.demo.lesson.greenhand.StreamExample$StreamTestExample@ef5, age=5, name=5)]
distinct
[1, 2]
sorted
[1, 2, 7, 9, 12]
[12, 9, 7, 2, 1]
skip&limit
[4, 5]
anyMatch
true
false
allMatch
false
true
noneMatch
false
true
findAny
1
findFirst
1
16
5
相关文章
|
编解码 运维 监控
课时9:典型案例2:函数计算在音视频场景实践
课时9:典型案例2:函数计算在音视频场景实践
|
29天前
|
机器学习/深度学习 存储 人工智能
【AI系统】模型转换基本介绍
模型转换技术旨在解决深度学习模型在不同框架间的兼容性问题,通过格式转换和图优化,将训练框架生成的模型适配到推理框架中,实现高效部署。这一过程涉及模型格式转换、计算图优化、算子统一及输入输出支持等多个环节,确保模型能在特定硬件上快速、准确地运行。推理引擎作为核心组件,通过优化阶段和运行阶段,实现模型的加载、优化和高效执行。面对不同框架的模型文件格式和网络结构,推理引擎需具备高度的灵活性和兼容性,以支持多样化的应用场景。
59 4
【AI系统】模型转换基本介绍
|
2月前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
122 4
|
3月前
|
Python 机器学习/深度学习 人工智能
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
【10月更文挑战第1天】本文通过构建一个简单的强化学习环境,演示了如何创建和训练智能体以完成特定任务。我们使用Python、OpenAI Gym和PyTorch搭建了一个基础的智能体,使其学会在CartPole-v1环境中保持杆子不倒。文中详细介绍了环境设置、神经网络构建及训练过程。此实战案例有助于理解智能体的工作原理及基本训练方法,为更复杂应用奠定基础。首先需安装必要库: ```bash pip install gym torch ``` 接着定义环境并与之交互,实现智能体的训练。通过多个回合的试错学习,智能体逐步优化其策略。这一过程虽从基础做起,但为后续研究提供了良好起点。
240 4
手把手教你从零开始构建并训练你的第一个强化学习智能体:深入浅出Agent项目实战,带你体验编程与AI结合的乐趣
|
8月前
|
资源调度 前端开发 JavaScript
第十章(应用场景篇) Single-SPA微前端架构深度解析与实践教程
第十章(应用场景篇) Single-SPA微前端架构深度解析与实践教程
266 0
|
机器学习/深度学习 人工智能 自然语言处理
科普神文,一次性讲透AI大模型的核心概念
令牌,向量,嵌入,注意力,这些AI大模型名词是否一直让你感觉熟悉又陌生,如果答案肯定的话,那么朋友,今天这篇科普神文不容错过。我将结合大量示例及可视化的图形手段,为你由浅入深一次性讲透AI大模型的核心概念。本文转载至:https://baijiahao.baidu.com/s?id=1779925030313909037&wfr=spider&for=pc。确实是一篇很不错的文,很好的解释了大模型底层的一些基本概念,对于我这种AI新手非常友好哈哈哈
科普神文,一次性讲透AI大模型的核心概念
|
6月前
|
机器学习/深度学习 自然语言处理 搜索推荐
|
7月前
|
存储 Cloud Native NoSQL
深度解析数据库技术:核心原理、应用实践及未来展望
一、引言 在信息化高速发展的今天,数据库技术作为数据管理的基石,承载着企业运营、决策支持、大数据分析等核心功能
|
6月前
|
存储 数据采集 搜索推荐
使用Java实现智能推荐系统的关键技术
使用Java实现智能推荐系统的关键技术
|
弹性计算 运维 监控
课时9:典型案例2:函数计算在音视频场景实践(一)
典型案例2:函数计算在音视频场景实践(一)

热门文章

最新文章