可以使用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。可以根据实际需求对结果进行进一步处理或输出

现在我有一个list列表列表中有多个机器对象机器对象中有来源、机器码、硬件名称、创建时间等字段现在我需要将这个list按来源、机器码、硬件名称进行分组并取出各分组中最大的创建时间 用java实现

原文地址: https://www.cveoy.top/t/topic/iCMC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录