Java8如何從一個(gè)Stream中過(guò)濾null值_第1頁(yè)
Java8如何從一個(gè)Stream中過(guò)濾null值_第2頁(yè)
Java8如何從一個(gè)Stream中過(guò)濾null值_第3頁(yè)
Java8如何從一個(gè)Stream中過(guò)濾null值_第4頁(yè)
Java8如何從一個(gè)Stream中過(guò)濾null值_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第Java8如何從一個(gè)Stream中過(guò)濾null值目錄從一個(gè)Stream中過(guò)濾null值Solution(解決)stream方法過(guò)濾條件的使用下面以List為例

從一個(gè)Stream中過(guò)濾null值

復(fù)習(xí)一個(gè)Stream包含null數(shù)據(jù)的例子.

Java8Examples.java

packagecom.mkyong.java8;

importjava.util.List;

importjava.util.stream.Collectors;

importjava.util.stream.Stream;

publicclassJava8Examples{

publicstaticvoidmain(String[]args){

StreamStringlanguage=Stream.of("java","python","node",null,"ruby",null,"php");

ListStringresult=language.collect(Collectors.toList());

result.forEach(System.out::println);

}

}

output

java

python

node

null//---NULL

ruby

null//---NULL

php

Solution(解決)

為了解決上面的問(wèn)題,我們使用:Stream.filter(x-x!=null)

Java8Examples.java

packagecom.mkyong.java8;

importjava.util.List;

importjava.util.stream.Collectors;

importjava.util.stream.Stream;

publicclassJava8Examples{

publicstaticvoidmain(String[]args){

StreamStringlanguage=Stream.of("java","python","node",null,"ruby",null,"php");

//ListStringresult=language.collect(Collectors.toList());

ListStringresult=language.filter(x-x!=null).collect(Collectors.toList());

result.forEach(System.out::println);

}

}

output

java

python

node

ruby

php

另外,過(guò)濾器還可以用:Objects::nonNull

importjava.util.List;

ListStringresult=language.filter(Objects::nonNull).collect(Collectors.toList());

stream方法過(guò)濾條件的使用

@Data

@AllArgsConstructor

publicclassUser{

privateLongid;//id

privateIntegerage;//年齡

privateBytegentle;//性別

privateStringname;//名字

privateIntegerrank;//排名

Useruser0=newUser(1L,18,(byte)0,"張三",1);

Useruser1=newUser(2L,20,(byte)1,"李四",4);

Useruser2=newUser(3L,35,(byte)0,"王五",2);

Useruser3=newUser(4L,29,(byte)1,"趙六",3);

下面以List為例

實(shí)際上只要是Collection的子類,玩法都類似

1、生成stream

ListUserlist=Arrays.asList(user0,user1,user2,user3);

StreamUserstream=null;

stream=list.stream();//需要預(yù)判NPE

stream=Optional.of(list).orElseGet(Collections::emptyList).stream();//需要預(yù)判NPE

stream=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream();

stream=Optional.ofNullable(list).orElseGet(Collections::emptyList).parallelStream();//并行處理流

stream=Stream.of(user0,user1,user2,user3).parallel();//直接構(gòu)造

stream=Stream.of(Arrays.asList(user0,user1),Arrays.asList(user2,user3)).flatMap(Collection::stream);//flatMap合并

2、stream操作

//過(guò)濾出性別為0的user

ListUseruserList=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().filter(user-(byte)0==user.getGentle()).collect(Collectors.toList());

//獲取排名大于1的用戶年齡set

SetIntegerageList=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().filter(user-1user.getRank()).map(User::getAge).collect(Collectors.toSet());

//合計(jì)性別為0的user的年齡

IntegertotalAge=Optional.ofNullable(userList).orElseGet(Collections::emptyList).stream().map(User::getAge).reduce(0,Integer::sum);

//按排名倒序排列

ListUsersortedUserList=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().sorted(Cparing(User::getRank,Comparator.reverseOrder())).collect(Collectors.toList());

//獲取排名第2高的user

UserrankUser=Optional.ofNullable(sortedUserList).orElseGet(Collections::emptyList).stream().skip(1).findFirst().get();

//排名最高的user

UserhighestRankUser=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().max(Cparing(User::getRank)).get();

//是否存在排名大于1的user

booleanflag=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().anyMatch(user-user.getRank()

//是否所有user排名都大于1

booleanflag=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().allMatch(user-user.getRank()

//是否所有user排名都不大于5

booleanflag=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().noneMatch(user-user.getRank()

//按唯一id分組

MapLong,UseridUserMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.toMap(User::getId,Function.identity()));

//按唯一id,名字分組

MapLong,StringidNameMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.toMap(User::getId,User::getName));

//按年齡,名字分組,相同年齡的后出現(xiàn)的被覆蓋

MapInteger,StringageNameMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.toMap(User::getAge,User::getName,(a,b)-a));

//按性別分組

MapByte,ListUsergentleUserMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.groupingBy(User::getGentle));

//按排名是否大于3分組

MapBoolean,ListUserpartitionUserMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.partitioningBy(user-user.getRank()3));

//按性別名字分組

MapByte,ListStringgentleNameMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.groupingBy(User::getGentle,Collectors.mapping(User::getName,Collectors.toList())));

//按性別年齡總和分組

MapByte,IntegergentleTotalAgeMap=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().collect(Collectors.groupingBy(User::getGentle,Collectors.reducing(0,User::getAge,Integer::sum)));

//迭代操作

Stream.iterate(0,i-i+1).limit(list.size()).forEach(i-{

System.out.println(list.get(i).getName());

//guavatable轉(zhuǎn)換

TableLong,String,IntegeridNameRankTable=Optional.ofNullable(list).orElseGet(Collections::emptyList).stream().map(user-ImmutableTable.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論