日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JDK1.8新特性:Stream流

發(fā)布時(shí)間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK1.8新特性:Stream流 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一、獲取流

1.根據(jù)Collection獲取流

2.根據(jù)Map獲取流

3.根據(jù)數(shù)組獲取流

二.常用方法

1.過(guò)濾:filter

2.統(tǒng)計(jì)個(gè)數(shù):count

3.取用前幾個(gè):limit

4.跳過(guò)前幾個(gè):skip

5.映射:map

6.組合:concat

7.逐一處理:forEach

三、常用方法綜合案例

四、函數(shù)拼接與終結(jié)方法

五、收集Stream結(jié)果

1.Stream轉(zhuǎn)集合

2.Stream轉(zhuǎn)數(shù)組

3.Stream轉(zhuǎn)數(shù)組方式二


一、獲取流

java.util.stream.Stream<T> Java 8新加入的最常用的流接口。(這并不是一個(gè)函數(shù)式接口。)

獲取一個(gè)流非常簡(jiǎn)單,有以下幾種常用的方式:

(1)所有的Collection 集合都可以通過(guò)stream 默認(rèn)方法獲取流;

(2)Stream 接口的靜態(tài)方法of 可以獲取數(shù)組對(duì)應(yīng)的流。

1.根據(jù)Collection獲取流

java.util.Collection 接口中加入了default方法stream 用來(lái)獲取流,所以其所有實(shí)現(xiàn)類(lèi)均可獲取流。

List<String> list = new ArrayList<>();// ...Stream<String> stream1 = list.stream();Set<String> set = new HashSet<>();// ...Stream<String> stream2 = set.stream();Vector<String> vector = new Vector<>();// ...Stream<String> stream3 = vector.stream();

2.根據(jù)Map獲取流

java.util.Map 接口不是Collection 的子接口,且其K-V數(shù)據(jù)結(jié)構(gòu)不符合流元素的單一特征,所以獲取對(duì)應(yīng)的流需要分key、value或entry等情況:

Map<String, String> map = new HashMap<>();Stream<String> keyStream = map.keySet().stream();Stream<String> valueStream = map.values().stream();Stream<Map.Entry<String, String>> entryStream = map.entrySet().stream();

3.根據(jù)數(shù)組獲取流

如果使用的不是集合或映射而是數(shù)組,由于數(shù)組對(duì)象不可能添加默認(rèn)方法,所以Stream 接口中提供了靜態(tài)方法of。

String[] array = { "張無(wú)忌", "張翠山", "張三豐", "張一元" };Stream<String> stream = Stream.of(array);

二.常用方法

流模型的方法被分成兩種:

終結(jié)方法:返回值類(lèi)型不再是Stream接口自身類(lèi)型的方法,不支持鏈?zhǔn)秸{(diào)用

非終結(jié)方法:返回值類(lèi)型仍然是Stream接口的方法,支持鏈?zhǔn)秸{(diào)用

1.過(guò)濾:filter

Stream<T> filter(Predicate<? super T> predicate);

2.統(tǒng)計(jì)個(gè)數(shù):count

long count();

3.取用前幾個(gè):limit

Stream<T> limit(long maxSize);

4.跳過(guò)前幾個(gè):skip

Stream<T> skip(long n);

5.映射:map

<R> Stream<R> map(Function<? super T, ? extends R> mapper);

該接口需要一個(gè)Function 函數(shù)式接口參數(shù),可以將當(dāng)前流中的T類(lèi)型數(shù)據(jù)轉(zhuǎn)換為另一種R類(lèi)型的流。

6.組合:concat

static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

7.逐一處理:forEach

void forEach(Consumer<? super T> action);

三、常用方法綜合案例

現(xiàn)在有兩個(gè)ArrayList 集合存儲(chǔ)隊(duì)伍當(dāng)中的多個(gè)成員姓名,要求使用傳統(tǒng)的for循環(huán)(或增強(qiáng)for循環(huán))依次進(jìn)行以

下若干操作步驟:

1. 第一個(gè)隊(duì)伍只要名字為3個(gè)字的成員姓名;

2. 第一個(gè)隊(duì)伍篩選之后只要前3個(gè)人;

3. 第二個(gè)隊(duì)伍只要姓張的成員姓名;

4. 第二個(gè)隊(duì)伍篩選之后不要前2個(gè)人;

5. 將兩個(gè)隊(duì)伍合并為一個(gè)隊(duì)伍;

6. 根據(jù)姓名創(chuàng)建Person 對(duì)象;

7. 打印整個(gè)隊(duì)伍的Person對(duì)象信息。

List<String> one = new ArrayList<>();one.add("迪麗熱巴");one.add("宋遠(yuǎn)橋");one.add("蘇星河");one.add("老子");one.add("莊子");one.add("孫子");one.add("洪七公");List<String> two = new ArrayList<>();two.add("古力娜扎");two.add("張無(wú)忌");two.add("張三豐");two.add("趙麗穎");two.add("張二狗");two.add("張?zhí)鞇?ài)");two.add("張三");// 第一個(gè)隊(duì)伍只要名字為3個(gè)字的成員姓名;// 第一個(gè)隊(duì)伍篩選之后只要前3個(gè)人;Stream<String> streamOne = one.stream().filter(s -> s.length() == 3).limit(3);// 第二個(gè)隊(duì)伍只要姓張的成員姓名;// 第二個(gè)隊(duì)伍篩選之后不要前2個(gè)人;Stream<String> streamTwo = two.stream().filter(s -> s.startsWith("張")).skip(2);// 將兩個(gè)隊(duì)伍合并為一個(gè)隊(duì)伍;// 根據(jù)姓名創(chuàng)建Person對(duì)象;// 打印整個(gè)隊(duì)伍的Person對(duì)象信息。Stream.concat(streamOne, streamTwo).map(Person::new).forEach(System.out::println);

四、函數(shù)拼接與終結(jié)方法

五、收集Stream結(jié)果

1.Stream轉(zhuǎn)集合

Stream流提供collect 方法,其參數(shù)需要一個(gè)java.util.stream.Collector<T,A, R> 接口對(duì)象來(lái)指定收集到哪種集合中。幸運(yùn)的是, java.util.stream.Collectors 類(lèi)提供一些方法,可以作為Collector 接口的實(shí)例:

public static <T> Collector<T, ?, List<T>> toList() :轉(zhuǎn)換為L(zhǎng)ist 集合。

public static <T> Collector<T, ?, Set<T>> toSet() :轉(zhuǎn)換為Set 集合。

Stream<String> stream = Stream.of("10", "20", "30", "40", "50");List<String> list = stream.collect(Collectors.toList());Stream<String> stream1 = Stream.of("10", "20", "30", "40", "50");Set<String> set = stream1.collect(Collectors.toSet());

2.Stream轉(zhuǎn)數(shù)組

Stream提供toArray 方法來(lái)將結(jié)果放到一個(gè)數(shù)組中,由于泛型擦除的原因,返回值類(lèi)型是Object[]的:

Object[] toArray();

Stream<String> stream3= Stream.of("10", "20", "30", "40", "50");Object[] objArray = stream3.toArray();

3.Stream轉(zhuǎn)數(shù)組方式二

有了Lambda和方法引用之后,可以使用toArray 方法的另一種重載形式傳遞一個(gè)IntFunction<A[]> 的函數(shù),繼
而從外面指定泛型參數(shù)。方法簽名:

<A> A[] toArray(IntFunction<A[]> generator);

Stream<String> stream4 = Stream.of("10", "20", "30", "40", "50");String[] strArray = stream4.toArray(String[]::new);

?

總結(jié)

以上是生活随笔為你收集整理的JDK1.8新特性:Stream流的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。