计算list中某一字段和
XXlist.stream().collect(Collectors.summingInt(XXDO::getXX));
计算一个number类型的List对象总和
Integer[] integerArray = {
1, 3, 5, 10, 18};
List<Integer> list = new ArrayList<>(Arrays.asList(integerArray));
IntSummaryStatistics summaryStatistics = list.stream().mapToInt((s) -> s).summaryStatistics();
System.out.println("总和:" + summaryStatistics.getSum());
System.out.println("平均数:" + summaryStatistics.getAverage());
System.out.println("总个数:" + summaryStatistics.getCount());
System.out.println("最大值:" + summaryStatistics.getMax());
System.out.println("最小值:" + summaryStatistics.getMin());
取字段转list
distinct 去重
List<Long> bussinessIdList = v.stream().map(AppUserCollectionDo::getCollectionBussinessId).distinct().collect(Collectors.toList());
import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;
//根据id去重
List<User> unique1 = list.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(User::getId))), ArrayList::new));
System.out.println(unique1);
//根据id和mobile去重
List<User> unique2 = list.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(o -> o.getId() + ";" + o.getMobile()))), ArrayList::new)
);
根据字段分类
//按属性
Map<Long, List<ImsAchievementMonthlyDo>> monthlyMap = monthlyDos.stream().collect(Collectors.groupingBy(ImsAchievementMonthlyDo::getSchedulingId));
//按天
Map<String, List<CmsRoomSiteDo>> online = cmsRoomSiteDos.stream().collect(Collectors.groupingBy(item -> DateUtil.format(item.getCreateTime(), "yyyy-MM-dd")));
//按小时
Map<String, List<CmsRoomSiteDo>> starLive = cmsRoomSiteDos.stream().collect(Collectors.groupingBy(item -> DateUtil.format(item.getCreateTime(), "HH:00:00")));
//按时长
Map<Long, List<CmsRoomSiteDo>> liveTime = cmsRoomSiteDos.stream().collect(Collectors.groupingBy(item -> item.getDurationTime()/3600));
根据字段转 map
Map<Long, CompanyVo> groupDoMap = companyList.stream().collect(Collectors.toMap(CompanyVo::getCompanyCode, CompanyVo->CompanyVo));
取字段计算和
filter 过滤
double payAmountSum = achievementDailyDos.stream().filter(d -> d.getPayAmount() != null).mapToDouble(ImsAchievementDailyDo::getPayAmount).sum();