JDK8新特性Stream流操作
1 package stream;
2
3 import java.util.ArrayList;
4 import java.util.function.Function;
5 import java.util.stream.Stream;
6
7 public class test {
8 public static void main(String[] args) {
9 ArrayList<String> one = new ArrayList<>();
10 one.add("迪丽热巴");
11 one.add("宋远桥");
12 one.add("苏星河");
13 one.add("石破天");
14 one.add("石中玉");
15 one.add("老子");
16 one.add("庄子");
17 one.add("洪七公");
18 //第二支队伍
19 ArrayList<String> two = new ArrayList<>();
20 two.add("古力娜扎");
21 two.add("张无忌");
22 two.add("赵丽颖");
23 two.add("张三丰");
24 two.add("尼古拉斯赵四");
25 two.add("张天爱");
26 two.add("张二狗");
27
28 //1. 第一个队伍只要名字为3个字的成员姓名;存储到一个新集合中。
29 Stream<String> stream = one.stream();
30 Stream<String> stringStream = stream.filter((String name) -> name.length() == 3);
31 // stringStream.forEach((String name)-> System.out.println(name));
32
33 //2. 第一个队伍筛选之后只要前3个人;存储到一个新集合中。
34 Stream<String> limit = stringStream.limit(3);
35 // limit.forEach((String name)-> System.out.println(name));
36
37 //3. 第二个队伍只要姓张的成员姓名;存储到一个新集合中。
38 Stream<String> stream1 = two.stream();
39 Stream<String> zhanglist = stream1.filter((String name) -> name.startsWith("张"));
40 // zhanglist.forEach((String name)-> System.out.println(name));
41
42 //4. 第二个队伍筛选之后不要前2个人;存储到一个新集合中。
43 Stream<String> skip = zhanglist.skip(2);
44 // skip.forEach((String name)-> System.out.println(name));
45
46 //5. 将两个队伍合并为一个队伍;存储到一个新集合中。
47 Stream<String> concat = Stream.concat(limit, skip);
48 // concat.forEach((String name)-> System.out.println(name));
49
50 //6. 根据姓名创建 Person 对象;存储到一个新集合中。
51 Stream<Person> personStream = concat.map((String name) -> new Person(name));
52
53 //7. 打印整个队伍的Person对象信息。
54 personStream.forEach((Person person) -> System.out.println(person));
55 }
56
57 }
# 注:代码中注释部分 是由于如果直接打印 ,该流对象就会失效,后续操作无法进行。
创建流对象的两种方式
1 java.util.stream.Stream<T>是Java 8新加入的最常用的流接口。(这并不是一个函数式接口。)
2 获取一个流非常简单,有以下几种常用的方式:
3 - 所有的Collection集合都可以通过stream默认方法获取流;
4 default Stream<E> stream()
5 - Stream接口的静态方法of可以获取数组对应的流。
6 static <T> Stream<T> of(T... values)
7 参数是一个可变参数,那么我们就可以传递一个数组
forEach()方法和count()方法属于终结方法,返回的对象是最终结果。像filter()、map()、concat()、skip()、limit()等返回的仍然是stream对象。而且filter()、map()、concat()、skip()、limit()
这些方法内部可以使用lambda表达式。
JDK8新特性Stream流操作的更多相关文章
- JDK8新特性---stream流
项目上用到了stream流,找篇blog,转载一下,介绍下Stream流的用法. 1 流概述 流是 JDK8 新增的成员,允许以声明性方式处理数据集合,可以把 Stream 流看作是遍历数据集合的一 ...
- JDK新特性关于流操作部分
// array 工具类 可以用来快捷的将数组转化为list List<String> strings = Arrays.asList("zhongguo", &quo ...
- 这可能是史上最好的 Java8 新特性 Stream 流教程
本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...
- Java8 新特性 Stream 短路终端操作
短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...
- JDK8新特性(二) 流式编程Stream
流式编程是1.8中的新特性,基于常用的四种函数式接口以及Lambda表达式对集合类数据进行类似流水线一般的操作 流式编程分为大概三个步骤:获取流 → 操作流 → 返回操作结果 流的获取方式 这里先了解 ...
- jdk8新特性-stream
一.什么是流stream 1.可理解为高级版本的 Iterator 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的. 2.单向,不可往复 数据只能遍历一次,遍历过一次后即用尽了,就好比 ...
- Java1.8新特性 - Stream流式算法
一. 流式处理简介 在我接触到java8流式数据处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包 ...
- 再来看看Java的新特性——Stream流
半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...
- java8 新特性Stream流的应用
作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8 stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...
- Java8 新特性 —— Stream 流式编程
本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...
随机推荐
- kafka如何保证数据的消息不丢失(最简洁)
一.kafka 本身配置层面1.1.replication.factor 默认值1创建kafka的topic时候,每个分区设置的副本数, 根据broker数量酌情设置, 建议业界通常做法设置为3 1. ...
- 详解 Serverless 架构的 6 大应用场景
导读 Serverless 架构将成为未来云计算领域重要的技术架构,将会被更多的业务所采纳.进一步深究,Serverless 架构在什么场景下有优秀的表现,在什么场景下可能表现得并不是很理想呢?或者说 ...
- <vue 组件 4、插槽的使用>
代码结构 一. 01-slot-插槽的基本使用 1. 效果 同样的一个插槽,父组件调用的时候不同展现的内容就不同 2.代码 01-slot-插槽的基本使用.html <!DOCTYPE ...
- mysql批量替换字段
一.需求将数据库内指定的数据进行批量修改,可使用replace函数如IP:端口号,只改端口号的部分,将所有192.168.1.1:8001的数据8001的端口号修改为3001replace函数的用法如 ...
- Spring AOP原来是这样实现的
Spring AOP 技术实现原理 在Spring框架中,AOP(面向切面编程)是通过代理模式和反射机制来实现的.本文将详细介绍Spring AOP的技术实现原理,包括JDK动态代理和CGLIB代理的 ...
- Java 使用二分查找快速定位元素位置
转载请注明出处: 快速定位 一个有序数列中 某一个元素的位置: 共有三种思路: 第一种:使用 for 循环,匹配元素值 与循环变量的值是否相等,相等则循环变量时的 i 则为元素位置 第二种:使用 二分 ...
- docker 安装 ElasticSearch 和 Kibana 及ik 中文分词器
本文为博主原创,未经允许不得转载: 1. 使用 docker 下载 elasticsearch 7.6.1 docker pull elasticsearch:7.6.1 2. 启动 elastic ...
- SD协议-时序
1.SD Timing 时序主要体现在CMD和Response的时序 S - 起始位,一直为0 T - Transmitter,1表示CMD(发起端是Host),0表示Response(发起端是Car ...
- 【RTOS】基于RTOS的降低功耗的策略
RTOS中降低功耗的策略 Saving Power with an RTOS 介绍 随着绿色节能产品需求的增加,快速增长的移动设备,其电池寿命最受关注,设计者必须要考虑在其设计中如何最大限度的降低功耗 ...
- 海思Hi35xx uboot启动分析总结
前言 在嵌入式linux设备中,uboot的最终目的就是启动kernel.对于uboot而言,没有人把它引导起来,所以uboot首先需要把自己加载起来,然后再去引导kernel的启动,这也就可以大致的 ...