Stream流使用

计算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();

猜你喜欢

转载自blog.csdn.net/asd521a65sdf12/article/details/117770693