22/12月遇到的问题

要学会stream的使用

项目上很多地方都用到了流,使用流过滤数据,分组数据等很方便
流是一个流水线,所以最后需要终结操作,之前只会简单分组。
后来发现可以设置分组的value(对分组的value二次映射),这样可以简化使用

对分组的value二次映射

List<UUID,List<Integer>> result = societyMemberService.list(new LambdaQueryWrapper<SocietyMember>()
                .eq(SocietyMember::getSocietyId, societies.stream().map(x -> x.getId()))
                .in(SocietyMember::getStudentUuid, students))
        .stream().collect(Collectors.groupingBy(x -> x.getStudentUuid(), Collectors.mapping(x -> x.getSocietyId(), Collectors.toList())));

当方法传递的参数是String类型,改变其引用,实际上在调用的地方不会收到效果

所以我是通过在方法中把改变之后的字符串返回,在调用的时候,接受返回值处理这个问题的
这里应该是String 在jvm层的内存结构的问题,后面有时间捋一下

集合的多字段排序

1.

Collections.sort(list, new Comparator<People>() {
    @Override
    public int compare(People a, People b) {
        // 有Code的优先
        if (!a.getCode().equals(b.getCode())) {
            return a.getCode().compareTo(b.getCode());
        }
        // 当前Name优先
        if (!a.getName().equals(b.getName())) {
            return b.getName().compareTo(a.getName());
        }
        //最后学习时间倒序
        return b.getCreateTime().compareTo(a.getCreateTime());
    }
});
code不同,按照name,name不同,按照时间。
posted @ 2022-12-14 21:58  总是如此zzz  阅读(5)  评论(0)    收藏  举报