import com.entity.Person;
import org.junit.Test;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @program: Demohander
* @description:JDK8新特性
* @author: GuoTong
* @create: 2020-11-18 10:14
**/
@SuppressWarnings("all")//正压一切警告
public class JDKStreamTest {
/*在Jdk1.8中引入了stream流的概念,
这个“流”并不同于IO中的输入和输出流,
它是Jdk中的一个类,
具体位置在:java.util.stream.Stream*/
/*关于它的操作主要分为三种:获取流、中间操作、最终操作*/
/*所谓获取流,就是将其他对象(非Stream对象)转为Stream对象。
只有两类对象可能转化为Stream对象,分别是:
数组(这个数组中的元素必须是引用类型)
集合*/
@Test
public void TestCreateStream() {
//数组获取流
Integer[] iArr = {12, 14, 15, 15, 17, 19, 22};
Stream<Integer> streamByArrInt = Stream.of(iArr);
// 数组
String[] str = "I Love You But I miss You so I miss you".split(" ");
Stream<String> streamByArrStr = Arrays.stream(str);
//集合获取流
List<String> list = Arrays.asList(str);
Stream<String> streamList = list.stream();
}
/*Stream流常用的中间操作:filter 过滤某些规则下的东西
* Stream流常用的终止操作:collect(Collectors.toList())---返回一个集合
* flatMap 可用Stream替换值,然后将多个Stream连接成一个Stream,会将之前生成Stream流的每一个元素更换为一个新的Stream对象。*/
@Test
public void TestStream01() {
//filter :
// filter方法用于通过设置的条件过滤出元素,下面的例子是过滤出长度大于3的字符串
String[] s = "I Love You But I miss You so I miss you".split(" ");
List<String> list = Arrays.asList(s);
// List流转:赛选大于3个字段的,返回一个集合
/*list.stream().filter(str -> str.length() > 3):只是流操作了,原数据并未改变*/
/*list.stream().filter(str -> str.length() > 3).collect(Collectors.toList());返回的新集合就改变了*/
List<String> collect = list.stream().filter(str -> str.length() > 3).collect(Collectors.toList());
collect.forEach(System.out::println);//还是经过流处理的集合
//map
//map元素用于映射每隔元素到对应的结果,下面的例子用map输出元素对应的平方数
Stream.of(1, 2, 3, 4, 5).map(i -> i * i).forEach(System.out::println);
System.out.println("============");
//flatMap 可用Stream替换值,然后将多个Stream连接成一个Stream,会将之前生成Stream流的每一个元素更换为一个新的Stream对象。
Stream<Integer> stream2 = Stream.of(1, 2).distinct()
.flatMap(numbers -> Stream.of(5, 6, 6, 7, 8));
//会将1,2都会替换为5,6,7,8,5,6,7,8
Object[] objects = stream2.toArray();
for (Object object : objects) {
System.out.println(object);
}
}
/*map、sorted测试*/
@Test
public void TestStream02() {
String[] str = {"1", "-12", "10", "23", "4", "7", "3"};
//map
//map元素内部遍历集合,可以对集合元素一系列操作。
List<String> list = Arrays.asList(str);
/*将集合元素转为大写(每个元素映射到大写)->降序排序->迭代输出*/
/*原始字符串的转大写,比较大小降序*/
Stream.of("a", "c", "f", "b", "w", "h", "z").map(String::toUpperCase).sorted((a, b) -> a.compareTo(b)).forEach(System.out::println);
System.out.println("====================================");
/*new Function<String, Integer>():标识类型转换:第一个范式需要转换为第二个范式的类型*/
list.stream().map(new Function<String, Integer>() {
@Override