1.最近开发遇到了一个集合按照Id分组然后进行根据价格的最大值sum,进行赋值的操作
net版本:
var stockMaxNum = lineList.GroupBy(g => g.ResID).ToDictionary(k => k.Key, v => v.Sum(t => t.StockMax)).Max(m => m.Value);//取相同顺序资源的最大库存
java版本:
Map list =lineList.stream().collect(Collectors.groupingBy(ResPriceInfo::getResID,Collectors.summingInt(d -> d.StockMax()))); int stockMaxNum =Collections.max(list.entrySet(), Comparator.comparingInt(Map.Entry::getValue)).getValue();
Map获取最大key的value的写法
Collections.max(linePriceGroup.entrySet(), Comparator.comparingLong(Map.Entry::getKey)).getValue();
C#版本的tryGetValue改写程Java版本的处理
关于math.ceil的使用处理,由于net里面的字段都是使用的BigDecimal而Java里面,这个方法只能传递Double的值,会操作相关类型的转换处理,
String ss=twoHotelPrice.getSalePrice().divide(BigDecimal.valueOf(2)).toString(); model.setSettlementPrice(BigDecimal.valueOf(Math.ceil(Double.valueOf(Double.valueOf(ss)))));
model.setSettlementPrice(twoHotelPrice.getSalePrice().divide(BigDecimal.valueOf(2)).setScale(0,BigDecimal.ROUND_UP));
主要是介绍了BigDecimal.setScale(0,BigDecimal.ROUND_UP))与Math.ceil的功能介绍
都是向上取整的处理,建议使用第二种方式减少代码量以及类型的相互转换
Map的嵌套问题 lambda的处理
C#的实现形式:
response.DatePrice = this._IPriceCalendar.ProductMgr.ProductDatePriceNewList.GroupBy(g => g.PDPTripVersion).ToDictionary(k => k.Key, v1 => v1.GroupBy(g => g.PDPSaleDate).ToDictionary(k => k.Key, v2 => v2.FirstOrDefault()));
JAVA的转换形式处理:
Map map = ProductMgr.productManagerModel.getProductDatePriceNewList().stream(). collect(Collectors.groupingBy(SGPProductDatePriceNewCustom::getPDPTripVersion)); Map priceListMap = null; for(Map.Entry listMap:map.entrySet()) { priceListMap=listMap.getValue().stream().collect(Collectors. toMap(SGPProductDatePriceNewCustom::getPDPSaleDate,SGPProductDatePriceNewCustom->SGPProductDatePriceNewCustom)); response.DatePrice.put(listMap.getKey(),priceListMap); }