本文主要講解經(jīng)常使用的n種代碼場(chǎng)景
首先需要知道幾個(gè)關(guān)鍵的方法
- map(mapToInt,mapToLong,mapToDouble)
- 使用頻率: #####
說(shuō)明 : 將流中的每一個(gè)元素T轉(zhuǎn)換成R
例如:
// 獲取集合中對(duì)象所有的姓名(處理數(shù)據(jù)應(yīng)該經(jīng)常用到)
List<String> collect = personList.stream().map(Person::getName).collect(Collectors.toList());
//如果要去重可以接著使用distinct()
List<String> collect = personList.stream().map(Person::getName).distinct().collect(Collectors.toList());
- flatMap(T -> Stream)
- 使用頻率: ####
說(shuō)明 : 將流中的每一個(gè)元素 T 映射為一個(gè)流譬圣,再把每一個(gè)流連接成為一個(gè)流,有人解釋成切片.
例如:
//集合中還是集合,但是我想要合并成一個(gè)集合
List<List<Person>> list = new ArrayList<>();
List<Person> collect = list.stream().flatMap(people -> people.stream()).collect(Collectors.toList());
//集合中對(duì)字符串處理之后合并成一個(gè)集合
List<String> list = new ArrayList();
list.add("1,2,3");
list.add("4,5,6");
list.add("7,8");
List<String> collect = list.stream().flatMap(str -> Arrays.stream(str.split(","))).collect(Collectors.toList());
- filter(T -> boolean)
- 使用頻率: ####
說(shuō)明 : 篩選出條件為true的元素
例如:
// 獲取年齡==5的元素
List<Person> collect = personList.stream().filter(person -> person.getAge() == 5).collect(Collectors.toList());
- anyMatch(T -> boolean),allMatch(T -> boolean),noneMatch(T -> boolean),findAny() , findFirst()
- 使用頻率: ####
說(shuō)明 : 這些方法都是字面意思,用起來(lái)很簡(jiǎn)單
例如:
// 查詢集合中年齡是否存在5歲的
boolean anyMatch = personList.stream().anyMatch(person -> person.getAge().equals(5));
- distinct()
- 使用頻率: ###
說(shuō)明 : 去重,equals方法比較兩個(gè)元素是否相等
// 這里需要說(shuō)明的是由于Person為對(duì)象(引用類型),所以這里如果需要去重,就要自己重寫(xiě)equals方法.
List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
- collect(Collectors.toXXX)
- 使用頻率: ######
說(shuō)明 : 收集流的方法
// personList.stream().distinct()這里處理完之后返回的還是流對(duì)象,我們需要轉(zhuǎn)換成集合的話就要使用.
List<Person> collect = personList.stream().distinct().collect(Collectors.toList());
//集合轉(zhuǎn)成map對(duì)象的使用, 第一個(gè)為key,后面是value,第三個(gè)參數(shù)當(dāng)key沖突的時(shí)候是保留前者還是保留后者,如果不處理的話,當(dāng)key沖突時(shí)會(huì)報(bào)異常.
Map<Integer, String> collect = personList.stream().collect(Collectors.toMap(person -> person.getAge(), person -> person.getName(), (p1, p2) -> p1));
Stream大大的簡(jiǎn)化了我們?nèi)粘4a的行數(shù),方便了使用,另外還可以減少數(shù)據(jù)庫(kù)的sql分組,limit處理.
** 看完的給個(gè)贊吧**
** 看完的給個(gè)贊吧**
** 看完的給個(gè)贊吧**