lamda常用操作

本文详细介绍了Java中对实体对象User进行分组(按性别)、Map对象分组、多字段分组,并演示了如何对实体User进行单字段排序(正序/倒序)以及List<Map<String, Object>>和Map<String, Integer>的排序。涉及的技术包括流API、Comparator和数据结构操作。
# 1. 分组
# 1.1. entity实体User分组
Map<String, List<User>> groupBySex = userList.stream().collect(Collectors.groupingBy(User::getSex));


# 1.2. Map<String,Object>对象分组
protected static List<Map<String, Object>> target;
Map<String, List<Map<String, Object>>> classifyData =
                    target.stream()
                                       .collect(Collectors.groupingBy(n -> String.valueOf(n.get("classify_id"))));


# 1.3. 多字段分组
        Map<String, List<Map<String, Object>>> target2=
                target.stream()
                        .collect(Collectors.groupingBy(n -> n.getOrDefault("aa", n.getOrDefault("bb", ""))
                                                       + "_" + n.getOrDefault("cc","")
                                                       + "_" + n.getOrDefault("dd","")
                                                       + "_" + n.getOrDefault("ee","")));
        // 获取结果集
        List<Map<String,Object>> target3= new ArrayList<>();
        for (Map.Entry<String, List<Map<String, Object>>> entryData : target2.entrySet()) {
            // 获取结果集
            String[] splitData = entryData.getKey().split("_");
            if (splitData.length == 4) {
                Map<String, Object> middleData = Map.of("aa", splitData[0],
                        "bb", splitData[1],
                        "cc", splitData[2],
                        "dd", splitData[3],
                        "ff", entryData.getValue().size());
                // 存放结果集
                target3.add(middleData);
            }
        }


# 2. 排序
# 2.1. entity实体User单字段排序(正序)
data.stream().sorted(Comparator.comparing(User::getUserId)).collect(Collectors.toList());


# 2.2. entity实体User单字段排序(倒序)
data.stream().sorted(Comparator.comparing(User::getUserId).reversed()).collect(Collectors.toList());


# 2.3. entity实体User多字段排序
userList.sort(Comparator.comparing(User::getId).thenComparing(User::getAge));


# 2.4. 对于List<Map<String,Object>>排序 (注:正序v1.compareTo.v2 倒序v2.compareTo.v1)
List<Map<String,Object>> target4 = new ArrayList<>();
Collections.sort(target4,
                (v1,v2) -> String.valueOf(v2.get("count")).compareTo(String.valueOf(v1.get("count"))));


# 2.5. 对Map<String,Integer>排序(正序)
lineChartData = lineChartData.entrySet().stream()
                .sorted(Map.Entry.comparingByKey())
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                        (oleValue, newValue) -> oleValue, LinkedHashMap::new));

# 2.6. 对Map<String,Integer>排序(倒序)
target5= target5.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                        (oldValue, newValue) -> oldValue, LinkedHashMap::new));

或者

target6 = target6.entrySet()
                .stream()
                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
                .limit(5)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                        (oldValue, newValue) -> oldValue, LinkedHashMap::new));

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值