Java简单技巧

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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值