Java - Stream
文章目录
- Stream流的作用
- Stream流的思想步骤
- Stream流的三类方法
- 集合获取Stream流的方法
- 数组获取Stream流的方法
- Stream流的常用中间方法
- Stream流的终结方法
- Stream流转为集合、数组
- 参考资料
Stream流的作用
- 简化集合和数组操作的API ,结合Lambda表达式
Stream流的思想步骤
- 先得到集合或数组的流
- 把元素放上去
- 然后用Stream简化的API操作元素
package Stream;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Stream;public class Demo01 {public static void main(String[] args) {// 从集合中挑选出 姓张 名字三位的 存储到新集合中List<String> list = new ArrayList<>();Collections.addAll(list,"张三丰","赵丽颖","张丰毅","张起灵","宋祖儿");List<String> newList = new ArrayList<>();for (String s : list) {if(s.startsWith("张")&&s.length()==3){newList.add(s);}}System.out.println(newList);//Stream流Stream<String> stream = list.stream();Stream<String> 张 = stream.filter(s -> s.startsWith("张") && s.length() == 3);张.forEach(s-> System.out.println(s));//Lambda表达式简化list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));}
}
Stream流的三类方法
- 获取Stream流
- 创建一条流水线,并把数据放到流水线上准备进行操作
- 中间方法
- 流水线上的操作,一次操作完毕后,还可以继续进行其他操作
- 终结方法
- 一个Stream流只能有一个终结方法,是流水线上的最后一个操作
集合获取Stream流的方法
- 使用Collection接口中的默认方法
- default Stream stream()
数组获取Stream流的方法
- public static Stream stream(T[] array)
- public static Stream of(T… values)
package stream;import java.util.*;
import java.util.stream.Stream;public class Demo02 {public static void main(String[] args) {//Collection获取流Collection<String> list = new ArrayList<>();Stream<String> stream = list.stream();//Map集合获取流Map<String,Integer> map = new HashMap<>();//1.Stream<String> keyStream = map.keySet().stream();Stream<Integer> valueStream = map.values().stream();//2.Stream<Map.Entry<String, Integer>> stream1 = map.entrySet().stream();//数组获取流String[] str = {"a","b","c"};//1.Stream<String> stream2 = Arrays.stream(str);//2.Stream<String> str1 = Stream.of(str);}
}
Stream流的常用中间方法
package stream;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;public class Demo03 {public static void main(String[] args) {List<String> list = new ArrayList<>();Collections.addAll(list,"aa","abc","cdd","dddd");//Stream<T> filter(Predicate<? super T> predicate); 对流中的数据进行过滤list.stream().filter(new Predicate<String>() {@Overridepublic boolean test(String s) {return s.startsWith("a");}});list.stream().filter(s-> s.startsWith("a")).forEach(s-> System.out.println(s));//out: aa abclist.stream().filter(s-> s.startsWith("a")).forEach(System.out::println); //out: aa abc//long count(); 统计个数long count = list.stream().count(); //out: 4System.out.println(count);//Stream<T> limit(long maxSize); maxSize指该流最多元素个数list.stream().filter(s->s.startsWith("a")).limit(1).forEach(System.out::println); //out: aa//map 加工//<R> Stream<R> map(Function<? super T, ? extends R> mapper); 修改流中元素, R加工后的元素类型list.stream().map(new Function<String, String>() {@Overridepublic String apply(String s) {return "搭嘎好:"+s;}});list.stream().map(s-> "搭嘎好:"+s).forEach(System.out::println); //out: 搭嘎好:aa 搭嘎好:abc 搭嘎好:cdd 搭嘎好:ddddlist.stream().map(new Function<String, Student>() {@Overridepublic Student apply(String s){return new Student(s);}}).forEach(System.out::println);//Lambda简化list.stream().map(s->new Student(s)).forEach(s-> System.out.println(s));//out: student:aa student:abc student:cdd student:dddd//简化 构造器引用 方法引用list.stream().map(Student::new).forEach(System.out::println);//out: student:aa student:abc student:cdd student:dddd//合并流//public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)Stream<String> stream1 = list.stream();Stream<String> stream2 = list.stream();Stream<String> stream3 = Stream.concat(stream1,stream2);stream3.forEach(System.out::println);//out://去重复list.stream().distinct().forEach(System.out::println);}
}class Student{private String name;public Student(String name){this.name = name;}public String getName(){return this.name;}public void setName(String name) {this.name = name;}public String toString(){return "student"+":"+this.name;}
}
- 中间方法也称为非终结方法,调用完成后返回新的流,支持链式编程。
- 并不会修改原集合或数组中的元素
Stream流的终结方法
//void forEach(Consumer<? super T> action);list.stream().forEach(System.out::println);
//long count();list.stream().count();
- 终结方法后流不再可以使用
Stream流转为集合、数组
package stream;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;public class Demo04 {public static void main(String[] args) {List<String> list = new ArrayList();Collections.addAll(list,"abc","acb","bac","bca");//<R, A> R collect(Collector<? super T, A, R> collector);List<String> collect = list.stream().collect(Collectors.toList());Set<String> collect1 = list.stream().collect(Collectors.toSet());}
}
参考资料
B站黑马视频
Java - Stream相关推荐
- Java-Runoob:Java Stream、File、IO
ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...
- Java Stream(流)的分类, 四大基本流的介绍
上一篇文章已经介绍过什么是流, 以及流的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java四大基本流的方法. 一, ...
- Java Stream简介, 流的基本概念.
在Java or .net编程中, 我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是S ...
- Java Stream API性能测试
Java Stream API性能测试 已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试 ...
- java stream中Collectors的用法
文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...
- java stream 原理
java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...
- Java Stream ORM现在带有JOIN
Speedment是一个Java Stream ORM工具包和运行时,它使您可以将数据库表作为标准Java Streams查看. 由于不必混合使用Java和SQL,因此该应用程序变得更加紧凑,从而使其 ...
- java stream 分组求和_Java stream List 求和、分组操作
Java stream List 求和.分组操作 前言 项目中经常会使用Stream操作一些集合数据,今天记录一下我经常使用的Stream操作 求和操作public static void main( ...
- java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作
写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接. 前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stre ...
- 【Java 8 新特性】Java Stream.of()用法示例
本页将介绍Java Stream.of方法示例.Stream.of用于为给定元素创建顺序流.我们可以传递单个元素或多个元素. 查看javadoc中Stream.of方法声明. static <T ...
最新文章
- 在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的
- Git如何回滚代码?
- springboot第十讲
- iphone7wifi模块多少钱_模块炉价格参差不齐,消费者应独具慧眼!
- Linux系统用户和用户组介绍
- BZOJ 3907: 网格( 组合数 + 高精度 )
- P3531-[POI2012]LIT-Letters【逆序对,树状数组】
- 解决循环引用--弱引用weak_ptr
- python中superclass是什么_Python中super()函数简介及用法分享
- 没学好 Netty ,要凉?
- Linux - ATT汇编基础
- bootstrap模板免费下载
- 网易编程题之地牢逃脱
- 扩展以太网——集线器
- 近观香港,远看上海,反思深圳
- 电脑如何打开软键盘,教大家Win10如何打开软键盘的方法
- [论文笔记|LIC-Fusion]LIC-Fusion: LiDAR-Inertial-Camera Odometry
- Android全面屏最大纵横比适配
- 回首过去展望未来——14年年终总结
- 油猴+JS代码创建DEAP网页按钮
热门文章
- 笔记----DX11.0转为DX11.2
- 竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生
- 零基础学python知乎-python学画画(上)
- 安卓厨房 for linux,安卓手机利用安卓厨房制作ROM图文教程
- MCGS 物联网 阿里云
- .cer证书不能导出.p12证书|苹果证书怎么修改信任设置。
- iOS10.3/ISO11证书信任设置
- vue里面怎么实现页面跳转_vue.js怎样做跳转页面?
- Skype for Desktop 8.0版本 多开2个及以上的方法
- J-B统计量检验样本正态性的原理