• Stream流终结操作方法、收集操作及Stream综合练习


    目录

    一、Stream流终结操作方法

    二、Stream流的收集操作

    三、Stream流综合练习


    一、Stream流终结操作方法

    概念:终结操作的意思,就是执行完此方法之后,Stream流将不能再执行其他操作

    常见方法:

    方法名说明
    void forEach(Consume action)对此流的每个元素执行操作
    long count()返回此流中的元素数

    代码演示:

    1. public class StreamDemo {
    2. public static void main(String[] args) {
    3. //创建一个集合,存储多个字符串元素
    4. ArrayList list = new ArrayList();
    5. list.add("林值瓦");
    6. list.add("张无极");
    7. list.add("王天涯");
    8. list.add("柳梅");
    9. list.add("张望");
    10. list.add("张启天");
    11. //需求1:把集合中的元素在控制台输出
    12. list.stream().forEach(System.out::println);
    13. //需求2:统计集合中有几个以张开头的元素,并把统计结果在控制台输出
    14. long count = list.stream().filter(s -> s.startsWith("张")).count();
    15. System.out.println(count);
    16. }
    17. }

    二、Stream流的收集操作

    概念:对数据使用Stream流的方式操作完毕后,可以把流中的数据收集到集合中

    常用方法:

    方法名说明
    R collect(Collector collector)把结果收集到集合中

    工具类Collectors提供了具体的收集方式:

    方法名说明
    public static Collector toList()把元素收集到List集合中
    public static Collector toSet()把元素收集到Set集合中
    public static Collector toMap(Function keyMapper,Function valueMapper)把元素收集到Map集合中

    代码演示:

    1. public class CollectDemo {
    2. public static void main(String[] args) {
    3. //创建List集合对象
    4. List list = new ArrayList();
    5. list.add("孙悟空");
    6. list.add("孙行者");
    7. list.add("王宝强");
    8. list.add("柳神");
    9. //需求1:得到名字为3个字的流
    10. Stream listStream = list.stream().filter(s -> s.length() == 3);
    11. //需求2:把使用Stream流操作完毕的数据收集到List集合中并遍历
    12. List names = listStream.collect(Collectors.toList());
    13. for(String name : names) {
    14. System.out.println(name);
    15. }
    16. //创建Set集合对象
    17. Set set = new HashSet();
    18. set.add(10);
    19. set.add(20);
    20. set.add(30);
    21. set.add(33);
    22. set.add(35);
    23. //需求3:得到年龄大于25的流
    24. Stream setStream = set.stream().filter(age -> age > 25);
    25. //需求4:把使用Stream流操作完毕的数据收集到Set集合中并遍历
    26. Set ages = setStream.collect(Collectors.toSet());
    27. for(Integer age : ages) {
    28. System.out.println(age);
    29. }
    30. //定义一个字符串数组,每一个字符串数据由姓名数据和年龄数据组合而成
    31. String[] strArray = {"孙悟空,560", "孙行者,555", "王宝强,33", "柳神,22"};
    32. //需求5:得到字符串中年龄数据大于28的流
    33. Stream arrayStream = Stream.of(strArray).filter(s -> Integer.parseInt(s.split(",")[1]) > 28);
    34. //需求6:把使用Stream流操作完毕的数据收集到Map集合中并遍历,字符串中的姓名作键,年龄作值
    35. Map map = arrayStream.collect(Collectors.toMap(s -> s.split(",")[0], s -> Integer.parseInt(s.split(",")[1])));
    36. Set keySet = map.keySet();
    37. for (String key : keySet) {
    38. Integer value = map.get(key);
    39. System.out.println(key + "," + value);
    40. }
    41. }
    42. }

    三、Stream流综合练习

    需求:

    现在有两个ArrayList集合,分别存储6名男演员名称和6名女演员名称,要求完成如下操作:

    男演员只要名字为3个字的前三人

    女演员只要姓林的,并且不要第一个

    把过滤后的男演员姓名和女演员姓名合并到一起

    把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据

    代码实现:

    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. }
    13. public class StreamTest {
    14. public static void main(String[] args) {
    15. //创建集合
    16. ArrayList manList = new ArrayList();
    17. manList.add("周润发");
    18. manList.add("成龙");
    19. manList.add("刘德华");
    20. manList.add("吴京");
    21. manList.add("周星驰");
    22. manList.add("李连杰");
    23. ArrayList womanList = new ArrayList();
    24. womanList.add("林心如");
    25. womanList.add("张曼玉");
    26. womanList.add("林青霞");
    27. womanList.add("柳岩");
    28. womanList.add("林志玲");
    29. womanList.add("王祖贤");
    30. //男演员只要名字为3个字的前三人
    31. Stream manStream = manList.stream().filter(s -> s.length() == 3).limit(3);
    32. //女演员只要姓林的,并且不要第一个
    33. Stream womanStream = womanList.stream().filter(s -> s.startsWith("林")).skip(1);
    34. //把过滤后的男演员姓名和女演员姓名合并到一起
    35. Stream stream = Stream.concat(manStream, womanStream);
    36. //把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据
    37. // stream.map(Actor::new).forEach(System.out::println);
    38. stream.map(Actor::new).forEach(p -> System.out.println(p.getName()));
    39. //把以上操作联合在一起
    40. Stream.concat(manList.stream().filter(s -> s.length() == 3).limit(3), womanList
    41. .stream().filter(s -> s.startsWith("林")).skip(1)).map(Actor::new)
    42. .forEach(p -> System.out.println(p.getName()));
    43. }
    44. }

     

  • 相关阅读:
    【Rust 日报】2022-09-18 Linus提议将Rust添加到Linux6.1内核
    Redis 的几种集群对比
    Jupyter notebook在超算平台上使用的详细教程
    Day 34 贪心算法 part03 : 1005.K次取反后最大化的数组和 134. 加油站 135. 分发糖果
    vlang捣鼓之路
    基于Bert模型的中文语义相似度匹配算法(离线模式)
    Cadence OrCAD Capture 关键网络逐个检查方法
    使用 dlv 进行 debug
    IC-705连接wfview
    python 采用selenium+cookies 获取登录后的网页
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/126914971