Stream过滤排序分组排序

本文深入探讨了Java Stream API的使用,包括如何进行过滤操作以筛选满足特定条件的元素,如何对Stream进行排序以得到有序结果,以及如何通过分组排序来组织数据。通过实例代码,详细阐述了这些高级特性,帮助开发者更高效地处理集合数据。
  List<Integer> list = Arrays.asList(1, 22, 33, 21, 23, 121, 34);
        //list转为流并消费
        list.stream()
                //处理
                .map(item -> item*10)
                //过滤
                .filter(item -> item > 30)
                //排序
                .sorted((a,b)-> b-a )
                //去重
                .distinct()
                //收集,得到返回值,做的操作才能生效
//                .collect(Collectors.toList())
                //规约 得到返回值,相加总数
//                .reduce((p1,p2) -> p1+p2 )
                //消费
//                .forEach(System.out::println)
//                .forEach(i-> System.out.println(i+"=="))

               ;
        list.stream().forEach(i-> System.out.println(i+"=="));
 //有出勤次数,按次数降序,按名称排序,按次数分组
        TreeMap<Integer, List<ReportTopVo>> collect = topVoList.stream()
//                .filter(o -> o.getAttendanceAllCount() > 0)
                .sorted(Comparator.comparing(ReportTopVo::getAttendanceAllCount,Comparator.reverseOrder())
                        .thenComparing(ReportTopVo::getUserName))
                //按分组升序
//                .collect(Collectors.groupingBy(ReportTopVo::getAttendanceAllCount,TreeMap::new,Collectors.toList()))
                //按分组降序
                .collect(Collectors.groupingBy(ReportTopVo::getAttendanceAllCount,(() -> new TreeMap().descendingMap()),Collectors.toList()));
    /**
     * 获取角色权限树
     * @param roleId
     * @return
     */
    public List<Permission> getRolePermissionTree(Integer roleId) {
        //获取角色所有权限
        List<Permission> permissionList = roleDao.selectPermissionByRole(roleId);
        List<Permission> permissions = permissionList.stream()
                //得到一级
                .filter(p -> p.getPid() == 0)
                //得到下一级
                .map(p -> {
                    p.setChildren(getChildren(p.getId(), permissionList));
                    return p;
                })
                //排序
                .sorted((p1, p2) -> p1.getSort() - p2.getSort())
                .collect(Collectors.toList());
        return permissions;
    }

    /**
     * 获取下级权限
     */
    public List<Permission> getChildren(Integer pid, List<Permission> permissionList) {
        List<Permission> children = permissionList.stream()
                //得到二级
                .filter(p -> p.getPid() == pid)
                //得到三级
                .map(p -> {
                    p.setChildren(getChildren(p.getId(), permissionList));
                    return p;
                })
                //排序
                .sorted((p1, p2) -> p1.getSort() - p2.getSort())
                .collect(Collectors.toList());
        return children;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值