/
    目标:stream流的常用API
    forEach: 逐一处理(遍历)
    count:统计个数
    — long count() 返回值是long
    filter: 过滤元素
    Stream filter(Predicate**
    <? super T> predicate);
    limit: 取前几个元素
    skip:跳过前几个元素
    map: 加工方法
    concat: 合并流
    */

    image.pngimage.png
    image.png
    这是没有简写的Stream流
    image.png
    这是简写了的Stream流
    image.png
    当前forEach 后面的s 和要输出的s变量一样,可以省略不写
    image.png
    这是未简写的:
    image.png
    这是简写后的
    image.png

    1. package com.itheima.d2_stream;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. import java.util.function.Function;
    5. import java.util.function.Predicate;
    6. import java.util.stream.Stream;
    7. /**
    8. * 目标:stream流的常用API
    9. * forEach: 逐一处理(遍历)
    10. * count:统计个数
    11. * -- long count() 返回值是long
    12. * filter: 过滤元素
    13. * Stream<T> filter(Predicate<? super T> predicate);
    14. * limit: 取前几个元素
    15. * skip:跳过前几个元素
    16. * map: 加工方法
    17. * concat: 合并流
    18. */
    19. public class StreamDemo03 {
    20. public static void main(String[] args) {
    21. List<String> list = new ArrayList<>();
    22. list.add("张无忌");
    23. list.add("周芷若");
    24. list.add("赵敏");
    25. list.add("张强");
    26. list.add("张三丰");
    27. list.add("张三丰");
    28. // Stream<T> filter(Predicate<? super T> predicate);
    29. list.stream().filter(new Predicate<String>() { // 这里的想当于遍历List每个对象,遍历到下面的形参中
    30. @Override
    31. public boolean test(String s) {
    32. return s.startsWith("张"); // 自定义返回值,“如果字符串s中是否以 张开头”,是的话就返回true
    33. }
    34. }).forEach(s -> System.out.println(s));
    35. // 这里的s相当于从list集合 遍历出来的元素
    36. long size = list.stream().filter(s -> s.length() == 3).count(); // 过滤出list列表名字有三个字的姓名的个数 4个
    37. System.out.println(size); // 4
    38. // limit: 取前几个元素 // 张无忌 张强 取list集合所有姓张的两个人 并且输出
    39. list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));
    40. // skip:跳过前几个元素 先过滤出来姓张的,然后跳过前两个姓张的人 输出剩下姓张的人
    41. list.stream().filter(s -> s.startsWith("张")).skip(2).forEach(System.out::println); //
    42. // Map加工方法
    43. // 给集合元素的前面都加上一个: 黑马的:
    44. // list.stream().map(new Function<String, String>() { // 为加工前是String类型, 要加工后也定义为String类型
    45. // @Override
    46. // public String apply(String s) {// 这里是接收将集合list 遍历之后的元素
    47. // return "黑马的:" + s; // 将遍历后的元素和 ”黑马的“字符串拼接
    48. // }
    49. // }).forEach(System.out::println);
    50. list.stream().map(s -> "黑马的:" + s).forEach(s -> System.out.println(s));
    51. // 需求: 把所有的名称 都加工成一个学生对象(先创建 一个学生类)
    52. // 将遍历后的s 元素 传入Student类 s 是遍历集合的元素 -> 后面是接返回值
    53. list.stream().map(s -> new Student(s)).forEach(s -> System.out.println(s)); // 并输出每个对象的名称
    54. // 合并流 concat
    55. Stream<String> s1 = list.stream().filter(s -> s.startsWith("张")); // 过滤姓张的人
    56. Stream<String> s2 = Stream.of("Java1", "Java2"); // 获取 Java1 和Java2 两个字符串的Stream流
    57. // public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) {
    58. Stream<String> s3 = Stream.concat(s1,s2);
    59. // s3 是合并了s1 和 s2 的流,现在将s3的元素遍历出来
    60. s3.forEach(s -> System.out.println(s));
    61. //张无忌
    62. //张强
    63. //张三丰
    64. //张三丰
    65. //Java1
    66. //Java2
    67. }
    68. }