java8 stream多条件分组

本文介绍如何使用 Java8 的 Stream API 实现多条件分组操作。通过一个具体的例子展示了如何按时间、投入类型及工种类别对 PlanTotal 对象进行三层嵌套分组,最终形成一个多层 Map 结构。
部署运行你感兴趣的模型镜像

java8 stream多条件分组

Map<String,Map<String, Map<String, List<PlanTotal>>>> mapMap = infos.stream().collect(
                    Collectors.groupingBy(PlanTotal::getPlanDateStr,
                        Collectors.groupingBy(PlanTotal::getPlanType,
                            Collectors.groupingBy(PlanTotal::getDictValue))));

其中PlanTotal是实体,分组顺序依次为planDate(时间) -> planType(投入类型) -> dictValue(工种)。

您可能感兴趣的与本文相关的镜像

Qwen-Image-Edit-2509

Qwen-Image-Edit-2509

图片编辑
Qwen

Qwen-Image-Edit-2509 是阿里巴巴通义千问团队于2025年9月发布的最新图像编辑AI模型,主要支持多图编辑,包括“人物+人物”、“人物+商品”等组合玩法

Java 8中,使用Stream API可以根据特定条件对数据进行分组。这种功能通过`Collectors.groupingBy()`方法实现,允许开发者根据一个或多个条件将集合中的元素分类。以下是一个典型的示例,演示如何根据对象的属性值进行分组。 假设有一个`Product`类,包含`name`和`price`两个字段: ```java class Product { private String name; private double price; // 构造函数、getter和setter public Product(String name, double price) { this.name = name; this.price = price; } public String getName() { return name; } public double getPrice() { return price; } } ``` 接下来,可以使用Java 8 Stream API根据`price`字段对`Product`对象进行分组,例如将价格大于10的和小于等于10的产品分别归类: ```java import java.util.*; import java.util.stream.Collectors; public class GroupingExample { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("A", 15.0), new Product("B", 8.0), new Product("C", 20.0), new Product("D", 5.0) ); Map<String, List<Product>> groupedByPrice = products.stream() .collect(Collectors.groupingBy(product -> product.getPrice() > 10 ? "Expensive" : "Cheap" )); System.out.println(groupedByPrice); } } ``` 上述代码中,`Collectors.groupingBy()`接受一个分类函数作为参数,该函数返回的字符串决定了每个元素被归入哪个组。最终结果是一个`Map<String, List<Product>>`,其中键是分类名称,值是对应分类下的产品列表。 此外,还可以进一步扩展分组逻辑,例如在每个组内再进行子分组或计算汇总信息。例如,可以按价格区间分组后,再根据产品的名称首字母进行二次分组: ```java Map<String, Map<Character, List<Product>>> groupedByPriceAndFirstLetter = products.stream() .collect(Collectors.groupingBy( product -> product.getPrice() > 10 ? "Expensive" : "Cheap", Collectors.groupingBy(product -> product.getName().charAt(0)) )); ``` 这种嵌套的分组方式可以灵活地应对复杂的业务需求,使得数据处理更加高效和直观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值