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


这是没有简写的Stream流
这是简写了的Stream流
当前forEach 后面的s 和要输出的s变量一样,可以省略不写
这是未简写的:
这是简写后的
package com.itheima.d2_stream;import java.util.ArrayList;import java.util.List;import java.util.function.Function;import java.util.function.Predicate;import java.util.stream.Stream;/*** 目标:stream流的常用API* forEach: 逐一处理(遍历)* count:统计个数* -- long count() 返回值是long* filter: 过滤元素* Stream<T> filter(Predicate<? super T> predicate);* limit: 取前几个元素* skip:跳过前几个元素* map: 加工方法* concat: 合并流*/public class StreamDemo03 {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("张无忌");list.add("周芷若");list.add("赵敏");list.add("张强");list.add("张三丰");list.add("张三丰");// Stream<T> filter(Predicate<? super T> predicate);list.stream().filter(new Predicate<String>() { // 这里的想当于遍历List每个对象,遍历到下面的形参中@Overridepublic boolean test(String s) {return s.startsWith("张"); // 自定义返回值,“如果字符串s中是否以 张开头”,是的话就返回true}}).forEach(s -> System.out.println(s));// 这里的s相当于从list集合 遍历出来的元素long size = list.stream().filter(s -> s.length() == 3).count(); // 过滤出list列表名字有三个字的姓名的个数 4个System.out.println(size); // 4// limit: 取前几个元素 // 张无忌 张强 取list集合所有姓张的两个人 并且输出list.stream().filter(s -> s.startsWith("张")).limit(2).forEach(s -> System.out.println(s));// skip:跳过前几个元素 先过滤出来姓张的,然后跳过前两个姓张的人 输出剩下姓张的人list.stream().filter(s -> s.startsWith("张")).skip(2).forEach(System.out::println); //// Map加工方法// 给集合元素的前面都加上一个: 黑马的:// list.stream().map(new Function<String, String>() { // 为加工前是String类型, 要加工后也定义为String类型// @Override// public String apply(String s) {// 这里是接收将集合list 遍历之后的元素// return "黑马的:" + s; // 将遍历后的元素和 ”黑马的“字符串拼接// }// }).forEach(System.out::println);list.stream().map(s -> "黑马的:" + s).forEach(s -> System.out.println(s));// 需求: 把所有的名称 都加工成一个学生对象(先创建 一个学生类)// 将遍历后的s 元素 传入Student类 s 是遍历集合的元素 -> 后面是接返回值list.stream().map(s -> new Student(s)).forEach(s -> System.out.println(s)); // 并输出每个对象的名称// 合并流 concatStream<String> s1 = list.stream().filter(s -> s.startsWith("张")); // 过滤姓张的人Stream<String> s2 = Stream.of("Java1", "Java2"); // 获取 Java1 和Java2 两个字符串的Stream流// public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) {Stream<String> s3 = Stream.concat(s1,s2);// s3 是合并了s1 和 s2 的流,现在将s3的元素遍历出来s3.forEach(s -> System.out.println(s));//张无忌//张强//张三丰//张三丰//Java1//Java2}}
