首页 > 编程语言 >记录每一天,流式编程 stream

记录每一天,流式编程 stream

时间:2023-08-01 13:47:03浏览次数:41  
标签:stream 编程 list System 流式 collect println 操作

流式编程 stream

  我以为遇到 lambda 已经够让我惊喜了,万万没想到 stream 的出现,才让我发现它才是函数式编程的主角。

  特点:

  • 无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。

  对 stream 的任何修改都不会修改背后的数据源,比如对 stream 执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新的 stream。

  • 惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
  • 可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

  对 流 的操作分为两类,中间操作和结束操作。 中间操作总是会惰式执行,只有在结束操作后才会把所有的中间操作执行。计算完后 stream 就会失效。

  区分中间操作和结束操作最简单的方法,就是看方法的返回值,返回值为stream的大都是中间操作,否则是结束操作。

public class streamAPITest {

@Test
public void t1(){
List<String> list = Arrays.asList("张三", "李四", "张三丰", "trh", "xnn","李四", "张三", "hzx");

//遍历
list.stream().forEach(i->{
System.out.println(i);
});

//获取所有姓张的人名 且 长度等于 3 的
List<String> a = list.stream()
.filter(s -> s.contains("张"))
.filter(s -> s.length() == 3)
.collect(Collectors.toList());
System.out.println("获取所有姓张的人名 且 长度等于 3 的" + a);

//去除重复元素
List<Object> objects = new ArrayList<>();
list.stream().distinct().forEach(i->{
objects.add(i);
});
System.out.println(objects);


//根据长度排序
List<String> collect = list.stream().sorted((s1, s2) ->
s2.length() - s1.length()
).collect(Collectors.toList());
System.out.println("根据长度排序"+collect);
}
}

学习源头: https://github.com/CarpenterLee

标签:stream,编程,list,System,流式,collect,println,操作
From: https://www.cnblogs.com/iopasd/p/17580365.html

相关文章

  • 零基础应该如何学习计算机编程?
    一、编程的概念让我们简单介绍一下编程。编程是人与计算机之间的一种交流方式,通过编写一系列的程序指令,指导计算机执行相应的任务。专门从事编程工作的技术人员被称为程序员。在计算机领域,编程可以细分为许多技术方向。从整体上看,可以分为两类,即高层编程和低层编程。当......
  • 编程实现邮件地址有效性检测
    这个VB6COM组件提供了一项即时邮件查询的功能。它有效的避免了向一个不存在的账户发送邮件的情况。例如,在ASP页面里面检查用户输入的邮件地址是否正确,并避免在你的用户数据库里面存储相关的错误信息。主要内容工作原理让我们首先来看一下这个组件是如何进行工作的。首先给定一个E-......
  • (Python编程)目录工具
    ProgrammingPython,3rdEdition翻译最新版本见wiki:http://wiki.woodpecker.org.cn/moin/PP3eD欢迎参与翻译与修订。   4.3.DirectoryTools 4.3.目录工具Oneofthemorecommontasksintheshellutilitiesdomainisapplyinganoperationtoasetoffilesin......
  • nginx日志中request_time小于upstream_response_time
    如题,最近监测nginx日志时,发现request_time小于upstream_response_time,如图, 正常情况下,request_time是从接受用户请求的第一个字节到发送完响应数据的时间,upstream_response_time是nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间,按常理推断request_time要大于upstr......
  • python教程 入门学习笔记 第3天 编程基础常识 代码注释 变量与常量
    编程基础常识一、注释1、对代码的说明与解释,它不会被编译执行,也不会显示在编译结果中2、注释分为:单行注释和多行注释3、用#号开始,例如:#这是我的第一个python程序4、注释可以写在单独一行,也可以写在一句代码后面5、不想执行编译,又不能删除的代码,可以先用#注释掉,代码批量注释......
  • SAS 编程技巧 - PROC SQL(二)
    上一节中,我们介绍了如何使用SQL创建和删除数据集、视图和索引。这一节我们介绍如何使用SQL修改数据集的结构和更新数据集中的数据。修改数据集结构使用ALTERTABLE可以修改数据集的结构,包括增加、删除变量、修改变量属性,以及对数据完整性约束(integrityconstraints)的操作......
  • 【雕爷学编程】Arduino动手做(177)---ESP-32 掌控板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • SAS 编程技巧 - PROC SQL(一)
    SAS编程技巧-PROCSQL(一)SQL全称StrucuredQueryLanguage,即结构化查询语言,广泛应用于关系型数据库中。SASBase使用PROCSQL提供了对SQL的实现。PROCSQL过程可以帮助你完成以下任务:创建数据集、视图和索引删除数据集、视图和索引修改数据集的结构更新数据集的......
  • C#中Socket编程,异步实现Server端定时发送消息
    在最近项目需求中,要求服务端定时向客服端发送消息。由于客户端从机的特性,只能接收Server发送的消息后回复,不能主动向服务端发送消息。起初,并未使用异步的方法进行编程,使用了Accept()、Revice()等方法。由于从机不能主动发送消息的特性,并未考虑到从机断电不能接收到Server消息的情......
  • 【雕爷学编程】Arduino动手做(176)---UFUN2.0 开发板
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......