• Java之Stream流


    本文主要介绍了Stream流,包括集合和数组的Stream流创建方式,List和Set集合直接使用stream()方法创建,Map集合间接使用stream()方法创建,而数组使用Stream流的静态方法of()创建,介绍了Stream流的中间操作,包括过滤filter(),限制limit()和跳过skip(),拼接concat)(),去重distinct(),排序sorted()等,最后介绍了Stream流的终结操作forEach()和count(),也给出Stream流的收集操作方法和综合练习。

    目录

    1、一个案例体验Stream流

    2、Stream流的常见生成方式

    3、Stream流的中间操作之filter

    4、Stream流之中间操作limit与skip

    5、Stream流中间操作之concat与distinct

    6、Stream流之中间操作sorted

    7、Stream之中间操作map与mapToInt

    8、Stream流的常用终结操作符forEach与count

    9、Stream流的收集操作(将流中数据收集到集合中)

    10、Stream流综合练习


    1、一个案例体验Stream流

    1. import java.util.ArrayList;
    2. public class StreamDemo01 {
    3. public static void main(String[] args) {
    4. ArrayList arrayList = new ArrayList<>() ;
    5. arrayList.add("张无忌") ;
    6. arrayList.add("张三");
    7. arrayList.add("李四");
    8. arrayList.add("张三丰");
    9. arrayList.add("刘小明");
    10. //找出姓张且名字为3个字的打印输出
    11. arrayList.stream().filter(s->s.length()==3).filter(s->s.startsWith("张")).forEach(System.out::println);
    12. }
    13. }

    2、Stream流的常见生成方式

    1. import java.util.*;
    2. import java.util.stream.Stream;
    3. public class StreamDemo02 {
    4. public static void main(String[] args) {
    5. //Collection体系的默认使用stream()方法生成流
    6. List list = new ArrayList<>() ;
    7. Stream stream1 = list.stream() ;
    8. Set set = new TreeSet<>() ;
    9. Stream stream2 = list.stream() ;
    10. //Map集合使用间接的方式生成
    11. Map map = new HashMap<>() ;
    12. Stream stream3 = map.keySet().stream() ;
    13. Stream stream4 = map.values().stream() ;
    14. Stream> stream5 = map.entrySet().stream() ;
    15. //数组通过Stream的静态方法of()生成流
    16. String [] arr = {"java","python","c++"} ;
    17. Stream stream6 = Stream.of(arr) ;
    18. Stream stream7 = Stream.of("java","python","c++") ;
    19. Stream stream8 = Stream.of(10,20,30) ;
    20. }
    21. }

    3、Stream流的中间操作之filter

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. public class StreamDemo03 {
    4. public static void main(String[] args) {
    5. List list = new ArrayList<>() ;
    6. list.add("张三");
    7. list.add("张无忌") ;
    8. list.add("孙小美") ;
    9. list.add("王五") ;
    10. list.add("张三丰") ;
    11. //找出姓张的并输出
    12. list.stream().filter(s->s.startsWith("张")).forEach(System.out::println);
    13. System.out.println("-------------");
    14. //找出名字长度为3的输出
    15. list.stream().filter(s->s.length()==3).forEach(s-> System.out.println(s));
    16. System.out.println("-------------");
    17. //找出姓张且名字长度为3的输出
    18. list.stream().filter(s->s.startsWith("张")).filter(s->s.length()==3).forEach(s-> System.out.println(s));
    19. }
    20. }

    4、Stream流之中间操作limit与skip

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. public class StreamDemo04 {
    4. public static void main(String[] args) {
    5. List list = new ArrayList<>() ;
    6. list.add("张三");
    7. list.add("张无忌") ;
    8. list.add("孙小美") ;
    9. list.add("王五") ;
    10. list.add("张三丰") ;
    11. //取前面三个元素打印
    12. list.stream().limit(3).forEach(System.out::println);
    13. System.out.println("-------------");
    14. //跳过两个元素,打印剩下的
    15. list.stream().skip(2).forEach(System.out::println);
    16. System.out.println("-------------");
    17. //跳过2个元素,剩余元素中打印前2个
    18. list.stream().skip(2).limit(2).forEach(s-> System.out.println(s));
    19. }
    20. }

    5、Stream流中间操作之concat与distinct

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. import java.util.stream.Stream;
    4. public class StreamDemo05 {
    5. public static void main(String[] args) { List list = new ArrayList<>() ;
    6. list.add("张三");
    7. list.add("张无忌") ;
    8. list.add("孙小美") ;
    9. list.add("王五") ;
    10. list.add("张三丰") ;
    11. //取前面4个元素
    12. Stream s1 = list.stream().limit(4) ;
    13. //跳过两个元素
    14. Stream s2 = list.stream().skip(2) ;
    15. //合并 前面两个并输出
    16. // Stream.concat(s1,s2).forEach(System.out::println);
    17. // System.out.println("-------------");
    18. //合并前面两个,去重后输出
    19. Stream.concat(s1,s2).distinct().forEach(s-> System.out.println(s));
    20. }
    21. }

    6、Stream流之中间操作sorted

    1. import java.util.ArrayList;
    2. import java.util.Comparator;
    3. public class StreamDemo06 {
    4. public static void main(String[] args) {
    5. ArrayList arrayList = new ArrayList<>() ;
    6. arrayList.add("zhangsan") ;
    7. arrayList.add("lisi") ;
    8. arrayList.add("wangwu") ;
    9. arrayList.add("malu") ;
    10. arrayList.add("liaoxiang") ;
    11. arrayList.stream().sorted((s1,s2)->{
    12. int num1 = s1.length() -s2.length() ;
    13. int num2 = num1==0 ? s1.compareTo(s2) : num1 ;
    14. return num2 ;
    15. }).forEach(System.out::println);
    16. System.out.println("----------------");
    17. arrayList.stream().sorted(new Comparator() {
    18. @Override
    19. public int compare(String s1, String s2) {
    20. int num1 = s1.length() -s2.length() ;
    21. int num2 = num1==0 ? s1.compareTo(s2) : num1 ;
    22. return num2 ;
    23. }
    24. }).forEach(s-> System.out.println(s));
    25. }
    26. }

    7、Stream之中间操作map与mapToInt

    1. import java.util.ArrayList;
    2. public class StreamDemo07 {
    3. public static void main(String[] args) {
    4. ArrayList arrayList = new ArrayList<>() ;
    5. arrayList.add("10") ;
    6. arrayList.add("20") ;
    7. arrayList.add("30") ;
    8. //集合元素转换成整数后输出
    9. arrayList.stream().map(s->Integer.parseInt(s)).forEach(System.out::println);
    10. //集合元素转换成整数求和输出
    11. int sum = arrayList.stream().mapToInt(Integer::parseInt).sum() ;
    12. System.out.println(sum);
    13. }
    14. }

    8、Stream流的常用终结操作符forEach与count

    1. import java.util.ArrayList;
    2. import java.util.List;
    3. public class StreamDemo08 {
    4. public static void main(String[] args) {
    5. List list = new ArrayList<>() ;
    6. list.add("张三");
    7. list.add("张无忌") ;
    8. list.add("孙小美") ;
    9. list.add("王五") ;
    10. list.add("张三丰") ;
    11. //统计集合中张开头的元素个数
    12. long cnt = list.stream().filter(s->s.startsWith("张")).count() ;
    13. System.out.println(cnt);
    14. //输出集合元素
    15. list.stream().forEach(System.out::println);
    16. }
    17. }

    9、Stream流的收集操作(将流中数据收集到集合中)

    1. import java.util.*;
    2. import java.util.stream.Collectors;
    3. import java.util.stream.Stream;
    4. public class StreamDemo09 {
    5. public static void main(String[] args) {
    6. List list = new ArrayList<>() ;
    7. list.add("张三") ;
    8. list.add("李四") ;
    9. list.add("王五子") ;
    10. Stream stream1 = list.stream().filter(s->s.length()==2) ;
    11. List list1 = stream1.collect(Collectors.toList()) ; //收集操作
    12. for(String s : list1){
    13. System.out.println(s);
    14. }
    15. System.out.println("---------------");
    16. Set set = new TreeSet<>() ;
    17. set.add(10) ;
    18. set.add(20) ;
    19. set.add(30) ;
    20. Stream stream2 = set.stream().filter(s->s>=20) ;
    21. Setset1 = stream2.collect(Collectors.toSet()) ;
    22. for(Integer i : set1){
    23. System.out.println(i);
    24. }
    25. System.out.println("---------------");
    26. String [] arr = {"张三,20","李四,19","王五,21"} ;
    27. //得到年龄大于等于20的流
    28. Stream stream3 = Stream.of(arr).filter(s->Integer.parseInt(s.split(",")[1])>=20) ;
    29. Map map = stream3.collect(Collectors.toMap(s->s.split(",")[0],s->Integer.parseInt(s.split(",")[1]))) ;
    30. for(String key : map.keySet()){
    31. System.out.println(key + ":" + map.get(key));
    32. }
    33. }
    34. }

    10、Stream流综合练习

    1. public class Actor {
    2. private String name ;
    3. public Actor(String name) {
    4. this.name = name;
    5. }
    6. public String getName() {
    7. return name;
    8. }
    9. public void setName(String name) {
    10. this.name = name;
    11. }
    12. }
    1. import java.util.ArrayList;
    2. import java.util.stream.Stream;
    3. public class StreamDemo10 {
    4. public static void main(String[] args) {
    5. ArrayList arrayList1 = new ArrayList<>() ;
    6. arrayList1.add("周伯通") ;
    7. arrayList1.add("杨过") ;
    8. arrayList1.add("郭靖") ;
    9. arrayList1.add("张无忌") ;
    10. arrayList1.add("张三丰") ;
    11. ArrayList arrayList2 = new ArrayList<>() ;
    12. arrayList2.add("林龙女") ;
    13. arrayList2.add("林黛玉") ;
    14. arrayList2.add("林学苑") ;
    15. arrayList2.add("薛宝钗") ;
    16. arrayList2.add("林大美") ;
    17. //男的只要名字为三个字的
    18. Stream s1 = arrayList1.stream().filter(s->s.length()==3) ;
    19. //女的只要姓林的,并且不要第一个
    20. Stream s2 = arrayList2.stream().skip(1).filter(s->s.startsWith("林")) ;
    21. //过滤后的男女名字合并到一起
    22. Stream s3 = Stream.concat(s1,s2) ;
    23. //将上一步的操作作为构造方法的参数创建对象,遍历数据
    24. s3.map(Actor::new).forEach(s-> System.out.println(s.getName()));
    25. }
    26. }
  • 相关阅读:
    CSS学习笔记
    CH59X/CH58X/CH57X PWM使用
    颈椎神经分布立体图高清,颈椎神经分布立体图片
    Leetcode24-两两交换链表中的节点详解
    《树莓派不吃灰》第二十三期:在树莓派搭建个人摄影站
    排序算法总结-C语言
    瑞幸咖啡为何能逆风翻盘?
    ​快解析内网穿透帮助企业快速实现协同办公​​
    python常见过滤器的整理
    Google Earth Engine ——常用简单的简写和全程
  • 原文地址:https://blog.csdn.net/nuist_NJUPT/article/details/126212513