package com.danbay.cloud.operation.test.stream;
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream;
public class Test01 {
public static void main(String[] args) {
testStream();
}
static void testStream(){
List<String> strList = new ArrayList<>();
//给strList添加10条数据: name + i
for (int i = 0; i < 50; i++) {
strList.add("name :" + i);
}
//过滤出包含字符“0”的所有数据并打印
strList.stream().filter(str -> str.contains("0")).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("===========================");
//添加一条重复数据:"name :15"
strList.add("name :15");
//过滤出以字符“5”结尾的所有数据并打印,此时有重复数据
strList.stream().filter(str -> str.endsWith("5")).map(String::toUpperCase).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("===========================");
//返回前5个元素
strList.stream().limit(5).map(String::toUpperCase).forEach(System.out::println);
System.out.println("===========================");
//过滤出以字符“5”结尾的所有数据并打印,并去重
strList.stream().distinct().filter(str -> str.endsWith("5")).map(String::toUpperCase).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("----------------------------");
strList.stream().filter(str -> str.endsWith("5")).map(String::toUpperCase).distinct().collect(Collectors.toList()).forEach(System.out::println);
System.out.println("===========================");
//!注意:forEach 是 terminal 操作,因此它执行后,Stream 的元素就被“消费”掉了,你无法对一个 Stream 进行两次 terminal 运算。
//!forEach 不能修改自己包含的本地变量值,也不能用 break/return 之类的关键字提前结束循环。
Stream<List<Integer>> inputStream = Stream.of(
Arrays.asList(2, 3),
Arrays.asList(1),
Arrays.asList(4, 5, 6)
);
Stream<Integer> outputStream = inputStream.
flatMap((childList) -> childList.stream());
outputStream.forEach(System.out::println);
System.out.println("----------------------------");
Stream<List<Integer>> inputStream02 = Stream.of(
Arrays.asList(2, 3),
Arrays.asList(1),
Arrays.asList(4, 5, 6)
);
Stream<Integer> outputStream02 = inputStream02.
flatMap((childList) -> childList.stream());
outputStream02.sorted().forEach(System.out::println);
System.out.println("===========================");
System.out.println("===========================");
}
}
======================================================
输出结果
D:\java\jdk\bin\java.exe name :0
name :10 name :20 name :30 name :40
===========================
NAME :5 NAME :15 NAME :25 NAME :35 NAME :45 NAME :15
===========================
NAME :0 NAME :1 NAME :2 NAME :3 NAME :4
===========================
NAME :5 NAME :15 NAME :25 NAME :35 NAME :45
NAME :5 NAME :15 NAME :25 NAME :35 NAME :45
===========================
2 3 1 4 5 6
1 2 3 4 5 6
===========================
Process finished with exit code 0