JDK 8 Stream 流 用 法
阿新 • • 發佈:2020-11-18
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