java lambda表达式对List进行操作,包括过滤、指定字段去重、合计、分组统计、排序、列表转字符串、String[]转List<String>、List<String>排序
java lambda表达式对list进行操作,包括过滤、指定字段去重、合计、分组统计、排序、列表转字符串,熟练使用将告别xml写复杂sql
·
过滤
List<CarSeriesModel> find = models.stream().filter(b->b.getCarModel() != null
&& b.getCarModel().equals("x5").collect(Collectors.toList());
指定字段去重,保留一条记录
list = list.stream().filter(b->b.getWipNo() != null).collect(
Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getWipNo()))),
ArrayList::new));
指定字段合计
Integer projectCount = listAgentSumCount.stream()
.filter(b -> b.getAgentCount() > 1)
.mapToInt(ProjectDto::getProjectCount).sum();
BigDecimal reduce1 = uniOrderMapper.selectList(queryWrapper7).stream().map(a->a.getAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
正序
result.sort(Comparator.comparing(GroupModel::getLValue));
倒序
result.sort(Comparator.comparing(GroupModel::getLValue).reversed());
多字段排序
agents.sort(Comparator.comparing(UpProjectDto::getCheckQty).thenComparing(UpProjectDto::getAgentQty));
分组count
Map<String, Long> map2 = lsProject.stream().filter(b -> b.getAgentId().equals(t.getAgentId())).collect(
Collectors.groupingBy(Project::getRegionCode, Collectors.counting()));
分组sum
//intger值分组
Map<String, Double> map1 = lsTask.stream().filter(b -> b.getAgentId().equals(t.getAgentId())).collect(
Collectors.groupingBy(PrepareProjectAllot::getRegionCode, Collectors.summingDouble(PrepareProjectAllot::getCheckQty)));
//bigdecimal值分组
Map<String, BigDecimal> sumMap = lp.stream().collect(
Collectors.groupingBy(BrokerageOrder::getUserId,
Collectors.reducing(BigDecimal.ZERO, BrokerageOrder::getPayAmount, BigDecimal::add)));
//分组统计count
Map<String, Long> countMap = lp.stream().collect(
Collectors.groupingBy(BrokerageOrder::getUserId, Collectors.counting()));
//对分组对象进行处理
List<BrokerageTotalDto> res = new ArrayList<>();
for(Map.Entry<String, Long> entry:countMap.entrySet()){
String userId = entry.getKey();//取key
Double amount = sumMap.get(userId);//
BrokerageTotalDto dto = new BrokerageTotalDto();
dto.setUserId(userId);
dto.setCount(entry.getValue());//取value
dto.setAmount(amount);
res.add(dto);
}
列表转字符串
String roleIds = list.stream().map(SysUserRole::getRoleId).collect(Collectors.joining(","));
String[]转List<String>
String result = "A,B,C,D";
String[] arr = result.split(",");
List<String> list = Arrays.asList(arr);
List<String>排序
Collections.sort(list);
List<String>转字符串
String results = String.join(",", list);
更多推荐
所有评论(0)