在Java中搜索和编辑ArrayList中的元素

时间:2015-11-26 10:39:52

标签: java arraylist

这是我的问题。

我创建了一个数组列表:

ArrayList <account> list = new ArrayList<account>();

我添加了一个帐户:

account studentAccount = new account(employeeId(), employeeName(), employeeEmail(), 0);

现在我正在尝试更改员工的电子邮件,其中员工的ID等于000001。 我尝试使用indexOf,但始终返回-1。 有人可以解释如何搜索和编辑这种arrayList中的元素。我遇到过多个教程,但他们都在讨论arrayLists,其中每个插槽都由一个int或一个字符等进行通信。

4 个答案:

答案 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课程中的equalsaccount才能正常使用。

但是,这两种方法应考虑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");