可以使用Java的Stream API来实现这个需求。首先,我们需要创建一个自定义的类来表示机器对象,包含来源、机器码、硬件名称和创建时间等字段。然后,我们可以使用Stream的distinct()方法对列表进行去重,使用max()方法找到最大创建时间的对象。

以下是一个示例实现:

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Machine {
    private String source;
    private String machineCode;
    private String hardwareName;
    private LocalDateTime createTime;

    public Machine(String source, String machineCode, String hardwareName, LocalDateTime createTime) {
        this.source = source;
        this.machineCode = machineCode;
        this.hardwareName = hardwareName;
        this.createTime = createTime;
    }

    public String getSource() {
        return source;
    }

    public String getMachineCode() {
        return machineCode;
    }

    public String getHardwareName() {
        return hardwareName;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    @Override
    public String toString() {
        return "Machine{" +
                "source='" + source + '\'' +
                ", machineCode='" + machineCode + '\'' +
                ", hardwareName='" + hardwareName + '\'' +
                ", createTime=" + createTime +
                '}';
    }
}

public class Main {
    public static void main(String[] args) {
        // 创建机器对象列表
        List<Machine> machines = new ArrayList<>();
        machines.add(new Machine("来源1", "机器码1", "硬件名称1", LocalDateTime.of(2022, 1, 1, 0, 0)));
        machines.add(new Machine("来源1", "机器码1", "硬件名称1", LocalDateTime.of(2022, 2, 1, 0, 0)));
        machines.add(new Machine("来源2", "机器码2", "硬件名称2", LocalDateTime.of(2022, 3, 1, 0, 0)));
        machines.add(new Machine("来源2", "机器码2", "硬件名称2", LocalDateTime.of(2022, 4, 1, 0, 0)));

        // 按来源、机器码、硬件名称进行去重并保留最大创建时间的对象
        List<Machine> distinctMachines = machines.stream()
                .collect(Collectors.toMap(
                        machine -> machine.getSource() + machine.getMachineCode() + machine.getHardwareName(),
                        machine -> machine,
                        (existing, replacement) ->
                                existing.getCreateTime().isAfter(replacement.getCreateTime()) ? existing : replacement
                ))
                .values()
                .stream()
                .collect(Collectors.toList());

        // 打印结果
        distinctMachines.forEach(System.out::println);
    }
}

输出结果为:

Machine{source='来源1', machineCode='机器码1', hardwareName='硬件名称1', createTime=2022-02-01T00:00}
Machine{source='来源2', machineCode='机器码2', hardwareName='硬件名称2', createTime=2022-04-01T00:00}
``
现在我有一个list列表列表中有多个机器对象机器对象中有来源、机器码、硬件名称、创建时间等字段现在我需要将这个list按来源、机器码、硬件名称进行去重 并在去重过程中在重复的对象中留下其中最大创建时间的对象 用java实现

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

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