当前位置: 首页 > 知识库问答 >
问题:

如何在对象的arraylist中找到对象的一个元素?[副本]

龙飞文
2023-03-14

我有一个Employee类对象的arraylist。每个员工都有id、fname、lname等。我需要获取员工id所在元素的索引,例如1234521953。如何找到员工所在的索引?每个身份证都是独一无二的这就是为什么我要通过身份证找到他。

public class Employee extends Person {
    private String employerName;
    private LocalDate employmentDate;
    private LocalDate releaseDate;
    private BigDecimal salary;
    private String jobtitle;    
}

这是我的班级成员:

public class Person {
    public long getId() {
        return id;
    }

    private long id;
    private String fname;
    private String lname;
    private String addressLine;
    private LocalDate birthDate;
}

我将它们添加到:

List<Employee> employeesAL = new ArrayList<>();

共有3个答案

柯默
2023-03-14

现代的方法是使用streams API:

public Optional<Employee> getEmployee(String id) {
    Optional<Employee> employee = employeesAL.stream()
          .filter(employee -> id.equals(employee.getId()))
          .findAny();

    return employee;
}

此方法返回可选

富波光
2023-03-14

你可以这样写:

public Employee getEmployee(String id) {
    for (Employee employee : employees) {
        if (employee.getId().equals(id)) {
            return employee;
        }
    }
    return null;
}

但是如果列表中有很多员工,它会很慢,因为它会迭代列表。如果您想通过ID快速查找员工,我建议您使用以员工为值的id键控的Map(例如HashMap)。

另一种选择是确保列表中的Employee对象按id顺序保存。然后可以对列表进行二进制搜索,以找到具有特定id的员工。

融焕
2023-03-14

如果您已经实现了。equals方法在Employee类中,您可以将其传递给。indexOf()

List<Employee> l = new ArrayList<>();
Employee e = new Employee("ID123");
int idx = l.indexOf(e);

由于ID是唯一的,因此不需要检查中的所有字段。equals()方法,只需检查ID

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Employee employee = (Employee) o;
    return id == employee.id;
}

或者自己实现,使用indexOf的相同逻辑

int idx = -1;
for (int i = 0; i < l.size(); i++) {
    if (e.getId() == l.get(i).getId()) {
        idx = i;
        break;
    }
}
 类似资料:
  • 目前我正在做一项与多边形相关的工作。多边形可以描述为几个顶点。 现在,我有一些多边形已经矢量 一种方法可以告诉我,一个点在哪个多边形内 我需要设置返回的多边形的颜色。 我的第一个问题是如何知道返回的多边形是否在向量内 我的第一个想法是使用无序的集合和比较(vertex.begin(),vertex)。end())。我不知道是否有更好的主意。 另一个问题是某些多边形可能包含相同的边。如何设计数据结构

  • 问题内容: 使用示例: 假设我有一个课堂电话。我还有另一个上课电话。 类的ArrayList为。 要遍历.. 的Arraylist而不是这样做: 我们可以像这样简单地遍历ArrayList : 现在,我要迭代并打印出所有第3个对象: 现在我的问题是: 与使用常规的for循环不同,我如何使用ArrayList迭代打印出枪支对象列表? 问题答案: 您要遵循与以前相同的模式: 在这种情况下,它将是:

  • 问题内容: 我研究过Java是按值传递对象引用,并且为了创建对象的本地副本,我可以执行clone()或copy-constructor。我还查看了深/浅副本以及关于stackoverflow的几篇文章。 现在我看一个例子: 我只读过几篇文章提到ArrayList实现可克隆,但是并没有真正说出如果类型为List而不是不实现可克隆的ArrayList,那么如何制作“列表”的本地副本。 如果“列表”是A

  • 我有对象列表。 每个项目有1个arrayList Item.propertylist.key.equals(“test”)作为新列表。

  • 我试图将元素添加到中,我使用下面的代码,但它显示语法错误。有人能帮我吗?

  • 我怎么能找到一个对象,,在