这是我的问题。
我创建了一个数组列表:
ArrayList <account> list = new ArrayList<account>();
我添加了一个帐户:
account studentAccount = new account(employeeId(), employeeName(), employeeEmail(), 0);
现在我正在尝试更改员工的电子邮件,其中员工的ID等于000001。 我尝试使用indexOf,但始终返回-1。 有人可以解释如何搜索和编辑这种arrayList中的元素。我遇到过多个教程,但他们都在讨论arrayLists,其中每个插槽都由一个int或一个字符等进行通信。
答案 0 :(得分:3)
您可以通过Arraylist找到ID为1的员工:
<tfoot>
<tr><td>This is the footer of the table</td></tr>
</tfoot>
我错过了一些信息以提供更具体的答案(ID /电子邮件的ID,getter和setter类型)
答案 1 :(得分:3)
indexOf
依赖于您覆盖hashCode
课程中的equals
和account
才能正常使用。
但是,这两种方法应考虑account
的所有(不可变)属性来计算其返回值(即员工ID,姓名,电子邮件等)。如果您只是在寻找具有给定帐号的实例,则需要按照@ParkerHalo的建议搜索所有元素。
答案 2 :(得分:3)
如果您使用的是Java 8,则可以使用lambda表达式/流API:
list.stream()
.filter(x -> x.getEmployeeId().equals("001"))
.forEach(x -> x.setEmail("ab@c.de"));
这会更改具有给定ID的每个帐户的电子邮件地址 - 理想情况下,filter
只会返回一个帐户(或者没有,这对于forEach
来说是合适的)。如果您有可能使用过滤器表达式并过滤返回更多帐户的内容,forEach
当然也可以正常工作。
答案 3 :(得分:1)
在java 8+下,您还可以使用java stream API:
// First find the element
Optional<Account> account = list.stream( )
.filter( a -> a.getEmployeeId().equals("0000001") )
.findAny();
// if found, set the email
if ( account.isPresent( ) )
account.get( ).setEmail( "newEmail");