這次呢撬陵,主要來講講使用 化骨綿掌-stream 中和核心部分 運(yùn)功珊皿。
本節(jié)中网缝,我將Stream類中的返回值類型還是Stream類對(duì)象的方法集中提取出來。給大家做一波講解蟋定。
主要為以下幾種
無需等待上游類型 ##### filter | map | flatMap | peek | peek |
需要等待上游類型 ##### distinct | limit | sorted
只要明白粉臊,每種的功能,想清楚上下游Stream對(duì)象中的元素類型驶兜,做出適當(dāng)?shù)钠唇印?br>
就能靈活快捷優(yōu)雅的運(yùn)用了扼仲。
filter 內(nèi)力的篩選
filter 演示.gif
public class Test20181204 {
//內(nèi)力源頭
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
@Test
public void test1() {
//運(yùn)功手法1 內(nèi)力篩選
//filter
List<Integer> collect = integerList.stream().
//第一次運(yùn)功 找出偶數(shù)
filter(i -> i % 2 == 0).
//第二次運(yùn)功 找出小于5的數(shù)字
filter(i -> i < 5).
collect(Collectors.toList());
System.out.println(collect);
}
}
[2, 4]
Stream<T> filter(Predicate<? super T> predicate);
filter方法,來自于Stream對(duì)象抄淑,輸出Stream對(duì)象屠凶,上下游對(duì)象類型相同。
在每一節(jié)上完成一種篩選功能肆资。
參數(shù)為一個(gè)Predicate 簡(jiǎn)單理解為 一個(gè)返回值類型為boolean的方法矗愧。
map 內(nèi)力的轉(zhuǎn)型map 演示.gif
public class Test20181204 {
//內(nèi)力源頭
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
@Test
public void test1() {
//運(yùn)功手法2 內(nèi)力轉(zhuǎn)換
//map
List<String> collect = integerList.stream()
.map(integer -> ("數(shù)字" + integer))
.map(s -> s + "哈哈哈").collect(Collectors.toList());
System.out.println(collect);
}
}
[數(shù)字1哈哈哈, 數(shù)字2哈哈哈, 數(shù)字3哈哈哈, 數(shù)字4哈哈哈, 數(shù)字5哈哈哈, 數(shù)字6哈哈哈, 數(shù)字7哈哈哈, 數(shù)字8哈哈哈, 數(shù)字9哈哈哈, 數(shù)字10哈哈哈]
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
map方法,來自于Stream對(duì)象郑原,輸出Stream對(duì)象唉韭,下游對(duì)象類型可以和上游不同。
在每一節(jié)上完成一種形變功能颤专。
參數(shù)為了一個(gè)Function 簡(jiǎn)單理解為 一個(gè)有固定返回類型的方法纽哥。
flatMap 內(nèi)力平鋪
flatMap 演示 普清.gif
public class Test20181205 {
//內(nèi)力源頭
private List<String> stringsList = Arrays.asList("1,1,1", "2,2,2", "3,3,3");
@Test
public void test1() {
//運(yùn)功手法5 內(nèi)力平鋪
//flatMap
List<String> collect = stringsList.stream().
flatMap(
s -> Arrays.asList(s.split(",")).stream()
)
.collect(Collectors.toList());
System.out.println(collect);
}
}
[1, 1, 1, 2, 2, 2, 3, 3, 3]
<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);
flatMap方法,來自于Stream對(duì)象栖秕,輸出Stream對(duì)象春塌,下游對(duì)象類型可以和上游不同。
從上游流中獲取元素簇捍,通過某種方法將元素變成Stream對(duì)象只壳,然后將每個(gè)元素產(chǎn)生的Stream對(duì)象順序的拼接成一個(gè)大的Stream對(duì)象。
參數(shù)為一個(gè) 返回結(jié)果為Stream對(duì)象的Function
peek 內(nèi)力鏡像
peek 演示.gif
public class Test20181205 {
//內(nèi)力源頭
private List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
@Test
public void test1() {
//運(yùn)功手法6 內(nèi)力鏡像
//peek
List<Integer> collect = integerList.stream()
.peek(integer -> System.out.println(integer))
.collect(Collectors.toList());
System.out.println(collect);
}
}
1
2
3
4
5
[1, 2, 3, 4, 5]
Stream<T> peek(Consumer<? super T> action);
peek方法暑塑,來自于Stream對(duì)象吼句,輸出Stream對(duì)象,上下游流中元素?zé)o變化事格。
從上游流中獲取元素惕艳,對(duì)每個(gè)元素執(zhí)行一個(gè)動(dòng)作。
參數(shù)為一個(gè)Consumer驹愚,可簡(jiǎn)單理解為一個(gè)無返回的方法远搪。
skip 內(nèi)力躍遷
public class Test20181205 {
//內(nèi)力源頭
private List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5);
@Test
public void test1() {
//運(yùn)功手法 內(nèi)力躍遷
//peek
List<Integer> collect = integerList.stream()
.skip(3)
.collect(Collectors.toList());
System.out.println(collect);
}
}
[4, 5]
Stream<T> skip(long n);
skip方法,來自于Stream對(duì)象逢捺,輸出Stream對(duì)象谁鳍,上下游對(duì)象類型相同。
跳過上游流中的前n個(gè)元素,將剩下的元素輸出到下游流中倘潜。
參數(shù)為 希望跳過元素的個(gè)數(shù)
sorted 內(nèi)力排序
public class Test20181205 {
//內(nèi)力源頭
private List<Integer> integerList1 = Arrays.asList(3, 2, 1, 5, 4);
@Test
public void test1() {
//運(yùn)功手法 內(nèi)力排序
//sorted
List<Integer> collect = integerList1.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(collect);
}
@Test
public void test2() {
//運(yùn)功手法 內(nèi)力排序
//sorted
List<Integer> collect = integerList1.stream()
.sorted((o1, o2) -> o2 - o1)
.collect(Collectors.toList());
System.out.println(collect);
}
}
test1:[1, 2, 3, 4, 5]
Stream<T> sorted();
test2:[5, 4, 3, 2, 1]
Stream<T> sorted(Comparator<? super T> comparator);
sorted方法绷柒,來自于Stream對(duì)象,輸出Stream對(duì)象涮因,上下游對(duì)象類型相同废睦。
對(duì)上游Stream中的元素排序,元素需要實(shí)現(xiàn)Comparable接口
參數(shù)為可選的
1不傳入元素的話蕊退,使用自然順序排序法郊楣。
2傳入一個(gè)Comparator,用來控制排序憔恳。
distinct 內(nèi)力去重
public class Test20181204 {
//內(nèi)力源頭
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);
@Test
public void test1() {
//運(yùn)功手法3 內(nèi)力去重
//distinct
List<Integer> collect = integerList.stream()
.distinct().collect(Collectors.toList());
System.out.println(collect);
}
}
[1, 2, 3, 4, 5]
Stream<T> distinct();
distinct方法瓤荔,來自于Stream對(duì)象,輸出Stream對(duì)象钥组,上下游對(duì)象類型相同输硝。
將上游流中的重復(fù)元素去除,保證下游流中元素唯一程梦。
無參數(shù)
limit 內(nèi)力限制
public class Test20181204 {
//內(nèi)力源頭
List<Integer> integerList = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);
@Test
public void test1() {
//運(yùn)功手法4 內(nèi)力限制
//limit
List<Integer> collect = integerList.stream().
limit(6).collect(Collectors.toList());
System.out.println(collect);
}
}
[1, 2, 3, 4, 5, 1]
Stream<T> limit(long maxSize);
limit方法点把,來自于Stream對(duì)象,輸出Stream對(duì)象屿附,上下游對(duì)象類型相同郎逃。
將上游流中的前n個(gè)元素輸出到下游流中。
參數(shù)為 希望取出元素的個(gè)數(shù)