1、簡要介紹
Java8,新增stream API,它與Java I/O中的流沒有關係;此stream,用來處理集合數據,可看成一個高級迭代器;Collection接口中,新增非抽象的stream()方法,用來獲取集合的流。
流的操作是內部迭代的,傳統開發中使用的for循環、迭代器屬於外部迭代。不太理想的是,java8中內部迭代的性能還是略差,有待提升。
特別注意:流只能使用一次,使用之後,流也就會廢掉。
2、代碼舉例
package com.list;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author liuxd
* @version 1.0
* @date 2019-12-12 14:29
*/
public class TestListStream {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
User user1 = new User("張三", 22, "男");
User user2 = new User("李四", 16, "男");
User user3 = new User("莉莉", 17, "女");
User user4 = new User("美美", 19, "女");
User user5 = new User("張聰", 24, "男");
User user6 = new User("李玲", 22, "男");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
list.add(user5);
list.add(user6);
List<User> newList = new ArrayList<>(6);
/**
* 第一、傳統方式過濾排序
*/
//遍歷集合,提取大於等於18歲用戶存放至newList中
for (User s : list) {
if (s.getAge() >= 18) {
newList.add(s);
}
}
//對newList按照年齡進行降序排序
newList.sort(new Comparator<User>() {
@Override
public int compare(User s1, User s2) {
//降序排序
return Integer.compare(s2.getAge(), s1.getAge());
}
});
System.out.println(newList);
/*
*第二、使用stream的寫法
* 1、獲取List的stream對象
* 2、使用filter方法進行過濾
* 3、使用sorted方法進行排序
* 4、使用collect方法將處理好的stream對象轉換爲集合對象
*/
newList = list.stream()
.filter(s -> s.getAge() >= 18)
.sorted(Comparator.comparing(User::getAge).reversed())
.collect(Collectors.toList());
System.out.println(newList);
}
}