gpt4 book ai didi

java - 如何在使用流比较 map 时处理 null - Java?

转载 作者:行者123 更新时间:2023-12-01 12:35:19 24 4
gpt4 key购买 nike

我有 2 个数据结构,其值如下:

List<Map<String,String>> customerDirectory
[{NAME=ALEX BENSON, PHONE=012-12342, ADDRESS=123 MAIN ST, CITY=QUEENS, STATE=NY},
{NAME=ZOYE ABEL, PHONE=012-12445, ADDRESS=123 WATERSIDE, CITY=WINDSOR, STATE=CT}]

Map<String,String> customerInfo
{NAME=ALEX BENSON, PHONE=012-12342, ADDRESS=123 MAIN ST}

我正在尝试遍历 customerDirectory 以查找 customerInfo 的键值是否完全匹配 - "NAME","PHONE","ADDRESS" 以便我可以找到记录是否重复。

所以我想出了:

List<String> compareKeys = Arrays.asList("NAME","PHONE","ADDRESS");

Function<Map<String,String>, String> getVal = mp -> compareKeys.stream().map(mp::get).map(String::trim).collect(Collectors.joining());

BiPredicate<Map<String,String>, Map<String,String>> checkDup = (mp1,mp2) -> getVal.apply(mp1).equals(getVal.apply(mp2));

boolean anyMatch = customerDirectory.stream().anyMatch(customer-> checkDup.test(customerInfo, customer));

但是 customerInfo 映射可以将 ADDRESS 的值设置为 null 我已经尝试过:

BiFunction<Map<String, String>, String, String> handleNull = (mp, key) -> mp.get(key) == null ? " " : mp.get(key);

我已经用过:

Function<Map<String,String>, String> getVal = mp -> compareKeys.stream().map(key->handleNull.apply(mp,key)).map(mp::get).map(String::trim).collect(Collectors.joining());

但我最终还是得到 NullPointerException 这意味着我可能错过了确切的流程。有没有更好的方法来处理 null 值?

最佳答案

如果我正确理解了您的问题,那么您只想知道是否有任何完全匹配,并且您希望将答案保留在 anyMatch 中。 请尝试使用以下代码更新您的代码.

Function<Map<String, String>, String> getVal = mp -> 
compareKeys.stream().map(mp::get).filter(Objects::nonNull).map(String::trim)
.collect(Collectors.joining());

关于java - 如何在使用流比较 map 时处理 null - Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62104542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com