/
目标: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每个对象,遍历到下面的形参中
@Override
public 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)); // 并输出每个对象的名称
// 合并流 concat
Stream<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
}
}