假设我有一个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循环
答案 0 :(得分:1)
我想您的面试官只是不想让您使用for
或while
循环在ArrayList
中查找对象,但是实际上您可以“无循环”地找到它们。 / p>
首先,您需要覆盖equals
类的hashCode
和Employee
:
@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