日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Stream中toMap引发NullPointerException____Stream的执行流程

發(fā)布時(shí)間:2025/3/12 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Stream中toMap引发NullPointerException____Stream的执行流程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Stream中toMap引發(fā)NullPointerException

1、引發(fā)NullPointerException的代碼如下:

List<SelfSettlementCardInfoDto> selfSettlementCardInfoDtos =selfCardAdapterManager.listSelfSettlementCardInfoDtoByCardIds(queryDto.getPartnerId(), cardIds, false); Map<Long, String> cardIdCardNoTokenMap = selfSettlementCardInfoDtos.stream().collect(Collectors.toMap(SelfSettlementCardInfoDto::getId, SelfSettlementCardInfoDto::getCardNoToken));

其中selfSettlementCardInfoDtos中的cardNoToken有可能為空。

習(xí)慣性地認(rèn)為hashmap支持指針和值為null,而stream中的toMap()方法也是用HashMap實(shí)現(xiàn)的,因此看到這個(gè)地方報(bào)NullPointerException的時(shí)候,很奇怪。

2、分析

查看toMap()源碼:

進(jìn)入merge()方法:

看到:

Objects.requireNonNull(remappingFunction);
Objects.requireNonNull(value);

大概就知道了:toMap方法不允許null值

因此:
Stream中toMap不允許key和value為null

3、改進(jìn)方法:

1、不用toMap方法

Map<Long, String> cardIdCardNoTokenMap = selfSettlementCardInfoDtos.stream().collect(HashMap::new, (m,v)->m.put(v.getId(), v.getCardNoToken()), HashMap::putAll);

2、在流中加上判空過(guò)濾

Map<Long, String> cardIdCardNoTokenMap = selfSettlementCardInfoDtos.stream().filter(t -> t.getCardNoToken() != null).collect(Collectors.toMap(SelfSettlementCardInfoDto::getId, SelfSettlementCardInfoDto::getCardNoToken));

Stream的執(zhí)行流程

Stream流中,每一個(gè)遍歷的對(duì)象執(zhí)行完所有的操作后,才會(huì)對(duì)下一個(gè)對(duì)象進(jìn)行操作。

@Testpublic void test10() {String[] s={"a","b","c","d"};List<String> collect = Stream.of(s).filter(s1 -> {System.out.println("s1");return s1.length() == 1;}).filter(s2 -> {System.out.println("s2");return s2.length() == 1;}).collect(Collectors.toList());System.out.println(collect);}

結(jié)果如下:

s1 s2 s1 s2 s1 s2 s1 s2 [a, b, c, d]

總結(jié)

以上是生活随笔為你收集整理的Stream中toMap引发NullPointerException____Stream的执行流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。