使⽤java8将list转为map
sortedlistMap常⽤⽅式
public Map<Long, String> getIdNameMap(List<Account> accounts) {
return accounts.stream().Map(Account::getId, Account::getUsername));
}
收集成实体本⾝map
public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
return accounts.stream().Map(Account::getId, account -> account));
}
//key由多个属性组成
Map<String, SalesPurchaseDailyStatistics> existStatisticsMap = existStatisticsList.stream().collect(Colle
Map<String, TOwpAmazon> tOwpAmazonMap = tOwpAmazonList.stream().Map(item -> Id().toString(), Function.identity()));
account -> account是⼀个返回本⾝的lambda表达式,其实还可以使⽤Function接⼝中的⼀个默认⽅法代替,使整个⽅法更简洁优雅:
public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
return accounts.stream().Map(Account::getId, Function.identity()));
}
重复key的情况
public Map<String, Account> getNameAccountMap(List<Account> accounts) {
return accounts.stream().Map(Account::getUsername, Function.identity()));
}
这个⽅法可能报错(java.lang.IllegalStateException: Duplicate key),因为name是有可能重复的。toMap有个重载⽅法,可以传⼊⼀个合并的函数来解决key冲突问题:
public Map<String, Account> getNameAccountMap(List<Account> accounts) {
return accounts.stream().Map(Account::getUsername, Function.identity(), (key1, key2) -> key2));
}
这⾥只是简单的使⽤后者覆盖前者来解决key重复问题。还有⼀种分组的⽅法:
Map<Long, List<ActivityUserMissionDO>> map = activityUserMissionDos.stream().upingBy(ActivityUserMissionDO::getParentModuleId));
指定具体收集的map
toMap还有另⼀个重载⽅法,可以指定⼀个Map的具体实现,来收集数据:
public Map<String, Account> getNameAccountMap(List<Account> accounts) {
return accounts.stream().Map(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new));
}
分组
Map<Integer, List<PyTradeOrderDt>> orderMap = pyTradeOrderDts.stream().upingBy(PyTradeOrderDt::getTradeNid));
orderMap.forEach((k, v) -> {
Set<String> collect = v.stream().map(PyTradeOrderDt::getSku).Set());
skuSet.addAll(collect);
});
//按多个属性分组
Map<String, List<JsonObject>> menuGroupMap = list.stream().upingBy(goods -> Integer("menu_id")+"_"+String("menu_name")));
List常⽤⽅式
List<String> nidList = resultList.stream().map(TrackNoOverTimeDto::getNid).ist());
//String类型转Int
List<Integer> nidIntList = nidList.stream().map(Integer::parseInt).List());
List排序
List<TrackNoOverTimeDto> resultList = new ArrayList<>();
resultList.forEach(item ->{
List<PyTradeLogs> pyTradeLogs = (Nid());
//取出⽇志ID最⼤的记录
PyTradeLogs tradeLogs = pyTradeLogs.stream().sorted((s1, s2) -> {
if (s1.getOpDate() != null && s2.getOpDate() != null) {
//如果⽇期都有值,按⽇期排序
return -s1.getOpDate()OpDate());
} else if (s1.getOpDate() == null && s2.getOpDate() == null) {
//如果⽇期都没有值,按主键ID排序
return -s1.getNID()NID());
} else if (s1.getOpDate() == null && s2.getOpDate() != null) {
//opDate为null的放在最后
return 1;
} else if (s1.getOpDate() != null && s2.getOpDate() == null) {
//opDate为null的放在最后
return -1;
}
return -s1.getNID()NID());
}).findFirst().get();
});
Filter
List<ChargerCluster> unSmartChargingClusters = chargerClusterList.stream().filter(item -> SmartCharging() == null || !SmartCharging()).List());
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论