1、修改Map中的value时,通过get方法取出并修改值,需再次通过put方法覆盖原值
for (Map.Entry<String, String> entry1 : rmTypeIdUsedMap.entrySet())
{
String rmTypeId = entry1.getKey();
// 取出原value
List list = allRmTypeIdUsedMap.get(rmTypeId);
if(list == null ) {
continue;
}
// 修改原value
list.add(entry1.getValue());
// 覆盖原value
allRmTypeIdUsedMap.put(rmTypeId, list);
}
2、Collectors.toMap(key, value)方法当value为null时导致java.util.HashMap.merge报NullPointerException
例如以下代码,AssetRequriedResourceDetailBean的position属性为空时会导致空指针异常
Map<String, String> rmTypeIdOverviewMap = entry.getValue().stream().
filter(bean -> AssetConst.U_SPACE_CAPACITY.equals(bean.getRmTypeId())).
collect(Collectors.toMap(AssetRequriedResourceDetailBean::getRmTypeId, AssetRequriedResourceDetailBean::getPosition));
202205111119450252150120156755FD.jpg
3、对分页后的数据进行逻辑操作(如过滤),导致分页功能异常
例如:
/*
assetInstanceFromDB为分页后数据,对其过滤后导致分页功能异常
*/
List assetInstanceFromDB = selectAssetInstanceWithConditionFromDB(dBQueryDto, request, pageNo, pageSize);
// 数据过滤
assetInstanceFromDB = assetInstancesFilter(activityType, assetInstanceFromDB);
PageInfo page = new PageInfo<>(assetInstanceFromDB);
解决办法:
(1) 可以将过滤逻辑放到sql语句中
(2) 在sql语句中难以实现时,可以:
复制一份page(target),通过page.getList()方法取出数据集,再对其做业务逻辑操作,最后通过target.setList()保存操作后的数据,并以taget作为返回的PageInfo对象。如下
PageInfo page = new PageInfo<>(assetInstanceFromDB);
// 复制分页属性(page -> target),保证对分页数据进行操作后分页功能仍正常
PageInfo target = new PageInfo<>();
org.springframework.beans.BeanUtils.copyProperties(page, target);
// 对分页后的数据进行过滤操作
// 数据源
List assetInstanceManagerRspBeans = page.getList();
// 逻辑过滤后的数据
assetInstanceManagerRspBeans = assetInstancesFilter(activityType, assetInstanceManagerRspBeans);
target.setList(assetInstanceManagerRspBeans);