现在我有一个list列表列表中有多个机器对象机器对象中有来源、机器码、硬件名称、创建时间等字段现在我需要将这个list按来源、机器码、硬件名称进行分组并取出各分组中最大的创建时间 用java实现
可以使用Java的Stream API来实现这个需求。首先,需要定义一个机器对象的类,假设命名为Machine。
public class Machine {
private String source;
private String machineCode;
private String hardwareName;
private LocalDateTime createTime;
// 省略构造方法、getter和setter
}
然后,假设你已经有一个包含多个机器对象的列表,名为machineList,可以按照如下方式实现分组和获取最大创建时间的功能。
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Machine> machineList = ...; // 假设已有机器对象列表
// 按来源、机器码、硬件名称分组,并获取各分组中最大的创建时间
Map<String, Map<String, Map<String, LocalDateTime>>> groupedMachines = machineList.stream()
.collect(Collectors.groupingBy(Machine::getSource,
Collectors.groupingBy(Machine::getMachineCode,
Collectors.groupingBy(Machine::getHardwareName,
Collectors.maxBy(Comparator.comparing(Machine::getCreateTime))))));
// 打印结果
groupedMachines.forEach((source, machineCodeMap) -> {
machineCodeMap.forEach((machineCode, hardwareNameMap) -> {
hardwareNameMap.forEach((hardwareName, maxCreateTime) -> {
System.out.println("来源: " + source);
System.out.println("机器码: " + machineCode);
System.out.println("硬件名称: " + hardwareName);
System.out.println("最大创建时间: " + maxCreateTime.orElse(null));
System.out.println("--------------------");
});
});
});
}
}
上述代码使用了嵌套的Collectors.groupingBy方法来实现多级分组,最终得到一个以来源、机器码和硬件名称为键,最大创建时间为值的Map。可以根据实际需求对结果进行进一步处理或输出
原文地址: https://www.cveoy.top/t/topic/iCMC 著作权归作者所有。请勿转载和采集!