java.util.stream_java.util.stream.Stream 接口中的常用方法
流模型的操作很豐富,下面介紹一些常用的API。這些方法可以被分成兩種:
延遲方法
返回值類型仍然是 Stream 接口自身類型的方法,因此支持鏈?zhǔn)秸{(diào)用。(除了終結(jié)方法外,其余方 法均為延遲方法。)
終結(jié)方法
返回值類型不再是 Stream 接口自身類型的方法,因此不再支持類似 StringBuilder 那樣的鏈?zhǔn)秸{(diào) 用。在這里介紹的終結(jié)方法包括 count 和 forEach 方法。
逐一處理:forEach
雖然方法名字叫 forEach ,但是與for循環(huán)中的“for-each”昵稱不同。
void forEach(Consumer super T> action);
該方法接收一個(gè) Consumer 接口函數(shù),會(huì)將每一個(gè)流元素交給該函數(shù)進(jìn)行處理。
java.util.function.Consumer接口是一個(gè)消費(fèi)型接口。
Consumer接口中包含抽象方法void accept(T t),意為消費(fèi)一個(gè)指定泛型的數(shù)據(jù)。
基本使用:
importjava.util.stream.Stream;public classDemo06ForEach {public static voidmain(String[] args) {
Stream stream = Stream.of("Java", "C", "Python", "Hadoop", "Spark");
stream.forEach(name->System.out.println(name));
}
}
這里調(diào)用的of()方法,方法簽名:
@SafeVarargspublic static Streamof(T... values) {returnArrays.stream(values);
}
過(guò)濾:filter
可以通過(guò) filter 方法將一個(gè)流轉(zhuǎn)換成另一個(gè)子集流。方法簽名:
Stream filter(Predicate super T> predicate);
該接口接收一個(gè) Predicate 函數(shù)式接口參數(shù)(可以是一個(gè)Lambda或方法引用)作為篩選條件。
boolean test(T t);
該方法將會(huì)產(chǎn)生一個(gè)boolean值結(jié)果,代表指定的條件是否滿足。如果結(jié)果為true,那么Stream流的 filter 方法將會(huì)留用元素;如果結(jié)果為false,那么 filter 方法將會(huì)舍棄元素。
基本使用
Stream流中的 filter 方法基本使用的代碼如:
importjava.util.stream.Stream;public classDemo07StreamFilter {public static voidmain(String[] args) {
Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");
Stream result = original.filter(s -> s.length() >= 5);
result.forEach(System.out::println);
}
}
運(yùn)行程序,控制臺(tái)輸出:
Python
Hadoop
Spark
這個(gè)例子中,通過(guò)Lambda表達(dá)式來(lái)指定了篩選的條件:字符串的長(zhǎng)度要大于等于5。
映射:map
如果需要將流中的元素映射到另一個(gè)流中,可以使用 map 方法。方法簽名:
Stream map(Function super T, ? extends R> mapper);
該接口需要一個(gè) Function 函數(shù)式接口參數(shù),可以將當(dāng)前流中的T類型數(shù)據(jù)轉(zhuǎn)換為另一種R類型的流。
java.util.stream.Function 接口是一個(gè)函數(shù)式接口,其中唯一的抽象方法為:
R apply(T t);
這可以將一種T類型轉(zhuǎn)換成為R類型,而這種轉(zhuǎn)換的動(dòng)作,就稱為“映射”。
基本使用
Stream流中的 map 方法基本使用的代碼如:
importjava.util.stream.Stream;public classDemo08StreamMap {public static voidmain(String[] args) {
Stream original = Stream.of("100", "200", "300");
Stream result = original.map(str ->Integer.parseInt(str));
result.forEach(System.out::println);
}
}
運(yùn)行程序,控制臺(tái)輸出:
100
200
300
這段代碼中, map 方法的參數(shù)通過(guò)方法引用,將字符串類型轉(zhuǎn)換成為了int類型(并自動(dòng)裝箱為 Integer 類對(duì)象)。然后調(diào)用Stream接口中的forEach方法,逐一輸出結(jié)果。
統(tǒng)計(jì)個(gè)數(shù):count
正如舊集合 Collection 當(dāng)中的 size 方法一樣,流提供 count 方法來(lái)數(shù)一數(shù)其中的元素個(gè)數(shù):
long count();
該方法返回一個(gè)long值代表元素個(gè)數(shù)(不再像舊集合那樣是int值)。
基本使用
importjava.util.stream.Stream;public classDemo09StreamCount {public static voidmain(String[] args) {
Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");
Stream result = original.filter(s -> s.length() >= 5);
System.out.println(result.count());
}
}
運(yùn)行程序,控制臺(tái)輸出:
3
取用前幾個(gè):limit
limit 方法可以對(duì)流進(jìn)行截取,只取用前n個(gè)。方法簽名:
Stream limit(long maxSize);
參數(shù)是一個(gè)long型,如果集合當(dāng)前長(zhǎng)度大于參數(shù)則進(jìn)行截取;否則不進(jìn)行操作。
基本使用
importjava.util.stream.Stream;public classDemo10StreamLimit {public static voidmain(String[] args) {
Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");
Stream result = original.limit(3);
result.forEach(System.out::println);
}
}
運(yùn)行程序,控制臺(tái)輸出:
Java
C
Python
跳過(guò)前幾個(gè):skip
如果希望跳過(guò)前幾個(gè)元素,可以使用 skip 方法獲取一個(gè)截取之后的新流:
Stream skip(long n);
如果流的當(dāng)前長(zhǎng)度大于n,則跳過(guò)前n個(gè);否則將會(huì)得到一個(gè)長(zhǎng)度為0的空流。
基本使用
importjava.util.stream.Stream;public classDemo11StreamSkip {public static voidmain(String[] args) {
Stream original = Stream.of("Java", "C", "Python", "Hadoop", "Spark");
Stream result = original.skip(3);
result.forEach(System.out::println);
}
}
運(yùn)行程序,控制臺(tái)輸出:
Hadoop
Spark
組合:concat
如果有兩個(gè)流,希望合并成為一個(gè)流,那么可以使用 Stream 接口的靜態(tài)方法 concat:
static Stream concat(Stream extends T> a, Stream extends T> b)
備注:這是一個(gè)靜態(tài)方法,與 java.lang.String 當(dāng)中的 concat 方法是不同的。
基本使用
importjava.util.stream.Stream;public classDemo12StreamConcat {public static voidmain(String[] args) {
Stream original1 = Stream.of("Java", "C", "Python");
Stream original2 = Stream.of("Hadoop", "Spark");
Stream result =Stream.concat(original1, original2);
result.forEach(System.out::println);
}
}
運(yùn)行程序,控制臺(tái)輸出:
Java
C
Python
Hadoop
Spark
Stream 接口中的常用方法就介紹到這里,為了加深理解,可以看一下使用Stream方式完成的簡(jiǎn)單練習(xí)。
總結(jié)
以上是生活随笔為你收集整理的java.util.stream_java.util.stream.Stream 接口中的常用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Vue 教程第九篇—— 动画和过度效果
- 下一篇: DWF文件该如何打开查看呢?