文章目录

  • 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相关推荐

  1. Java-Runoob:Java Stream、File、IO

    ylbtech-Java-Runoob:Java Stream.File.IO 1.返回顶部 1. Java 流(Stream).文件(File)和IO Java.io 包几乎包含了所有操作输入.输出 ...

  2. Java Stream(流)的分类, 四大基本流的介绍

    上一篇文章已经介绍过什么是流, 以及流的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java四大基本流的方法. 一, ...

  3. Java Stream简介, 流的基本概念.

    在Java or .net编程中,  我们经常见到"stream" 这个字眼. 我们大概知道这是个流的意思, 如果看完本文的话, 应该会有1个大概的概念. 一, Java中什么是S ...

  4. Java Stream API性能测试

    Java Stream API性能测试 已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试 ...

  5. java stream中Collectors的用法

    文章目录 简介 Collectors.toList() Collectors.toSet() Collectors.toCollection() Collectors.toMap() Collecto ...

  6. java stream 原理

    java stream 原理 需求 从"Apple" "Bug" "ABC" "Dog"中选出以A开头的名字,然后从中选 ...

  7. Java Stream ORM现在带有JOIN

    Speedment是一个Java Stream ORM工具包和运行时,它使您可以将数据库表作为标准Java Streams查看. 由于不必混合使用Java和SQL,因此该应用程序变得更加紧凑,从而使其 ...

  8. java stream 分组求和_Java stream List 求和、分组操作

    Java stream List 求和.分组操作 前言 项目中经常会使用Stream操作一些集合数据,今天记录一下我经常使用的Stream操作 求和操作public static void main( ...

  9. java peek函数_基础篇:JAVA.Stream函数,优雅的数据流操作

    写在开头:本文是转载于掘金上的一篇文章,已获得原作者授权,我会在文章最后放上原作者和原文链接. 前言 平时操作集合数据,我们一般都是for或者iterator去遍历,不是很好看.java提供了Stre ...

  10. 【Java 8 新特性】Java Stream.of()用法示例

    本页将介绍Java Stream.of方法示例.Stream.of用于为给定元素创建顺序流.我们可以传递单个元素或多个元素. 查看javadoc中Stream.of方法声明. static <T ...

最新文章

  1. 在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的
  2. Git如何回滚代码?
  3. springboot第十讲
  4. iphone7wifi模块多少钱_模块炉价格参差不齐,消费者应独具慧眼!
  5. Linux系统用户和用户组介绍
  6. BZOJ 3907: 网格( 组合数 + 高精度 )
  7. P3531-[POI2012]LIT-Letters【逆序对,树状数组】
  8. 解决循环引用--弱引用weak_ptr
  9. python中superclass是什么_Python中super()函数简介及用法分享
  10. 没学好 Netty ,要凉?
  11. Linux - ATT汇编基础
  12. bootstrap模板免费下载
  13. 网易编程题之地牢逃脱
  14. 扩展以太网——集线器
  15. 近观香港,远看上海,反思深圳
  16. 电脑如何打开软键盘,教大家Win10如何打开软键盘的方法
  17. [论文笔记|LIC-Fusion]LIC-Fusion: LiDAR-Inertial-Camera Odometry
  18. Android全面屏最大纵横比适配
  19. 回首过去展望未来——14年年终总结
  20. 油猴+JS代码创建DEAP网页按钮

热门文章

  1. 笔记----DX11.0转为DX11.2
  2. 竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生
  3. 零基础学python知乎-python学画画(上)
  4. 安卓厨房 for linux,安卓手机利用安卓厨房制作ROM图文教程
  5. MCGS 物联网 阿里云
  6. .cer证书不能导出.p12证书|苹果证书怎么修改信任设置。
  7. iOS10.3/ISO11证书信任设置
  8. vue里面怎么实现页面跳转_vue.js怎样做跳转页面?
  9. Skype for Desktop 8.0版本 多开2个及以上的方法
  10. J-B统计量检验样本正态性的原理