如何从没有循环的ArrayList获取对象?

时间:2018-11-24 08:55:31

标签: java android oop

假设我有一个Employee类:

class Employee {
         Employee(String name, int age)
         {
             this.name = name ;
             this.age = age;
         }
         String name ;
         int age;
     }

现在创建一个类似这样的列表:

ArrayList<Employee> aa = new ArrayList<Employee>();
 aa.add(new Employee("Nitish", 26));
 aa.add(new Employee("Sh", 2));
 aa.add(new Employee("S", 1));

我可以获取名称值为“ Nitish”的Employee对象吗?没有For循环

4 个答案:

答案 0 :(得分:1)

我想您的面试官只是不想让您使用forwhile循环在ArrayList中查找对象,但是实际上您可以“无循环”地找到它们。 / p>

首先,您需要覆盖equals类的hashCodeEmployee

@Override public boolean equals(Object obj) {
    // ...
}

@Override public int hashCode() {
    // ...
}

现在,您可以通过创建虚拟引用来使用ArrayList.indexOf查找对象(使用equals查找匹配项)

Employee target = new Employee("Nitish", 26);
int index = employees.indexOf(target);

这有点愚蠢,但我想有些面试官希望我们跳出框框思考。即使在后台使用循环,但是如果我的面试官问我同样的问题,而不是说不,你不会,我将使用此示例,因为我想尽最大的努力就是不按要求使用“循环” ,并说明其在后台的工作方式。然后,我将简要地提出其他更好的解决方案,并希望它能起作用!

答案 1 :(得分:0)

您可以使用过滤后的流:

Object[] array = aa
        .stream()
        .parallel()
        .filter((emp) -> emp.name.equals("Nitish"))
        .toArray();

if (array.length > 0) {
    Employee employee = (Employee)array[0];
    String name = employee.name;
    int age = employee.age;
    System.out.println("Found Employee with Name = " + name + " and Age = " + age);
} else {
    System.out.println("Not Found");
}

答案 2 :(得分:0)

尝试

Employee emp = aa.stream().filter(e->e.name.equals("Nitish")).findAny().orElse(null);

如果找不到此版本,则返回null

答案 3 :(得分:0)

ArrayList在基于索引的结构上工作。要从数组中添加,读取,获取值,需要对特定索引进行索引。 而是将数据存储在ArrayList上,可以使用Map。 使用键可以从地图访问值。

int