JDK8新特性之stream()
學習Stream之前建議先學Lambda的相關知識
使用例項:
Class Person {
private String name;
private int age;
...
}
List<Person> list = new ArrayList<>();
list.add(new Person("jack", 20));
list.add(new Person("mike", 25));
list.add(new Person("tom", 30));
使用方法:
1、stream() / parallelStream() :將集合轉為流
List list = new ArrayList();
// return Stream<E>
list.stream();
2、filter(T -> boolean):保留boolean的元素
//保留年齡為 20 的 person 元素
list = list.stream()
.filter(person -> person.getAge() == 20)
.collect(toList());
//列印輸出 [Person{name='jack', age=20}]
注:collect(toList()) 可以把流轉換為 List 型別
3、distinct() :去除重複元素
4、sorted() / sorted((T, T) -> int):對元素進行排序
前提:流中的元素的類實現了 Comparable 介面
//根據年齡大小來比較:
list = list.stream()
.sorted((p1, p2) -> p1.getAge() - p2.getAge())
.collect(toList());
簡化版:
list = list.stream()
.sorted(Comparator.comparingInt(Person::getAge))
.collect(toList());
5、limit(long n):返回前 n 個元素
list = list.stream()
.limit(2)
.collect(toList());
//列印輸出 [Person{name='jack', age=20}, Person{name='mike', age=25}]
6、skip(long n):去除前 n 個元素
list = list.stream()
.skip(2)
.collect(toList());
//列印輸出 [Person{name='tom', age=30}]
- 用在 limit(n) 前面時,先去除前 m 個元素再返回剩餘元素的前 n 個元素
- limit(n) 用在 skip(m) 前面時,先返回前 n 個元素再在剩餘的 n 個元素中去除 m 個元素
list = list.stream()
.limit(2)
.skip(1)
.collect(toList());
//列印輸出 [Person{name='mike', age=25}]
7、map(T -> R):將流中的每一個元素 T 對映為 R(類似型別轉換)
//newlist 裡面的元素為 list 中每一個 Person 物件的 name 變數
List<String> newlist = list.stream().map(Person::getName).collect(toList());
8、count():返回流中元素個數,結果為 long 型別
9、collect():收集方法
//toList
//toSet
//toCollection
List newlist = list.stream.collect(toList());
9.1、joining :連線字串
注:是一個比較常用的方法,對流裡面的字串元素進行連線,其底層實現用的是專門用於字串連線的 StringBuilder。
String s = list.stream().map(Person::getName).collect(joining(","));
//結果:jack,mike,tom
9.2、maxBy/minBy :取最值
//取age最大值
Optional<Person> optional = list.stream().collect(maxBy(comparing(Person::getAge)));
10、forEach():迴圈遍歷
//列印各個元素:
list.stream().forEach(System.out::println);
相關文章
- JDK8新特性之Stream流JDK
- JDK8新特性(4)—— stream 流JDK
- JDK8新特性JDK
- JDK8新特性之函式式介面JDK函式
- JDK8的新特性JDK
- Java8新特性探索之Stream介面Java
- JDK8新特性詳解JDK
- JAVA 1.8 新特性 StreamJava
- JDK新特性--Stream流JDK
- Java 8 新特性 StreamJava
- Oracle10g新特性之stream流配置Oracle
- JDK8新特性詳解(一)JDK
- JDK8新特性詳解(二)JDK
- JDK8特性之LocalDateTimeJDKLDA
- JDK8新特性學習總結JDK
- JDK8 新特性學習筆記JDK筆記
- JDK8新特性-你瞭解多少JDK
- jdk8之stream求和,保留兩位小數JDK
- Java8新特性--Stream APIJavaAPI
- java8新特性stream流Java
- JDK 1.8 新特性學習(Stream)JDK
- 深入理解 Redis 新特性:StreamRedis
- Java8新特性系列(Stream)Java
- Java 8新特性(二):Stream APIJavaAPI
- Redis5 的新特性 Redis StreamRedis
- JDK8中Stream使用解析JDK
- JDK 8 新特性之函數語言程式設計 → Stream APIJDK函數程式設計API
- Java 8 新特性:Stream 流快速入門Java
- 求不更學不動之Redis5.0新特性Stream嚐鮮Redis
- Java9新特性系列(Stream改進)Java
- Java8 新特性 —— Stream 流式程式設計Java程式設計
- Java8新特性第3章(Stream API)JavaAPI
- 專案中常用的JDK8之Stream流,長期補充JDK
- Java8 新特性 Stream流操作List集合 (二)Java
- Java 8新特性之旅:使用Stream API處理集合JavaAPI
- jdk8 stream 根據屬性去重JDK
- JDK8到JDK17有哪些吸引人的新特性?JDK
- Java8新特性——從Lambda表示式到Stream流Java