繁体   English   中英

如何通过使用Java中该对象的唯一ID从对象列表中获取特定对象?

[英]How to get specific object from list of objects by using unique id of that object in java?

我希望通过使用对象列表中对象的唯一ID来获取具有其所有值的特定对象。

我已经尝试过,但是在下面的代码下运行时却得到了索引-1。

List<JobDataDetail> jobList = getJobList();
JobDataDetail object = jobList.get(jobList.indexOf(new JobDataDetail(jobReferenceId)));

从班上

public class JobDataDetail implements Serializable,Comparable<JobDataDetail> {

    public int jobSequence;
    public String jobReferenceId;
    public String jobAddress;
    public String jobScheduledDate;

    public JobDataDetail() {
        super();
        // TODO Auto-generated constructor stub
    }

    public JobDataDetail(int jobSequence){
        super();
        this.jobSequence = jobSequence ;
    }
    public JobDataDetail(String jobReferenceId){
        super();
        this.jobReferenceId = jobReferenceId;
    }

    public int getJobSequence() {
        return jobSequence;
    }
    public void setJobSequence(int jobSequence) {
        this.jobSequence = jobSequence;
    }
    public String getJobReferenceId() {
        return jobReferenceId;
    }
    public void setJobReferenceId(String jobReferenceId) {
        this.jobReferenceId = jobReferenceId;
    }
    public String getJobAddress() {
        return jobAddress;
    }
    public void setJobAddress(String jobAddress) {
        this.jobAddress = jobAddress;
    }
    public String getJobScheduledDate() {
        return jobScheduledDate;
    }
    public void setJobScheduledDate(String jobScheduledDate) {
        this.jobScheduledDate = jobScheduledDate;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((jobReferenceId == null) ? 0 : jobReferenceId.hashCode());
        result = prime * result + jobSequence;
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        JobDataDetail other = (JobDataDetail) obj;
        if (jobReferenceId == null) {
            if (other.jobReferenceId != null)
                return false;
        } else if (!jobReferenceId.equals(other.jobReferenceId))
            return false;
        if (jobSequence != other.jobSequence)
            return false;
        return true;
    }

    @Override
    public int compareTo(JobDataDetail another) {
        return this.getJobReferenceId().compareTo(another.getJobReferenceId());
    }

}

我已经从equals方法中删除了jobSequence条件检查,它正在工作。

List.indexOf()使用equals()方法比较对象。

在您的情况下,您假设两个具有相同jobReferenceId对象均相等,但您的equals()方法却没有这样说( 由于方法末尾的jobSequence测试 )。


如果要通过列表中的一项属性从列表中获取一项,最简单的方法是在Java 8中使用过滤器表达式:

JobDataDetail job = jobList.stream()
                           .filter(j -> j.getAttribute().equals(someValue))
                           .findFirst();

如果没有Java 8选项,我将寻求经典for循环遍历列表的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM