Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中搜索和编辑ArrayList中的元素_Java_Arraylist - Fatal编程技术网

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

在Java中搜索和编辑ArrayList中的元素,java,arraylist,Java,Arraylist,这是我的问题 我创建一个数组列表: ArrayList <account> list = new ArrayList<account>(); 现在我正在尝试更改员工id等于000001的员工电子邮件。 我尝试使用indexOf,但始终返回-1。 有人能解释一下如何在这种arrayList中搜索和编辑元素吗。我遇到过多个教程,但它们都是关于Arraylist的,其中每个插槽都通过一个int或一个字符等进行对话。您可以通过Arraylist查找id为1的员工: for (a

这是我的问题

我创建一个数组列表:

ArrayList <account> list = new ArrayList<account>();
现在我正在尝试更改员工id等于000001的员工电子邮件。 我尝试使用indexOf,但始终返回-1。
有人能解释一下如何在这种arrayList中搜索和编辑元素吗。我遇到过多个教程,但它们都是关于Arraylist的,其中每个插槽都通过一个int或一个字符等进行对话。

您可以通过Arraylist查找id为1的员工:

for (account a : list) {
    if (a.getEmployeeId().equals("000001")
        a.setEmail("foobar");
}

我缺少一些信息来给出更具体的答案(id类型、id/电子邮件的getter和setter)

indexOf
依赖于您在
帐户中覆盖
hashCode
equals
,才能正常工作


但是,这两种方法应考虑
帐户的所有(不可变)属性,以计算其返回值(即员工id、姓名、电子邮件等)。如果您只是查找具有给定帐号的实例,则需要按照@ParkerHalo的建议,对所有元素执行搜索。

在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");
//首先找到元素
可选帐户=list.stream()
.filter(a->a.getEmployeeId().equals(“0000001”))
.findAny();
//如果找到,请设置电子邮件地址
if(account.isPresent())
account.get().setEmail(“newEmail”);

如果您使用的是Java 8,则可以使用lambda表达式/stream API:

list.stream()
    .filter(x -> x.getEmployeeId().equals("001"))
    .forEach(x -> x.setEmail("ab@c.de"));

这会更改具有给定id的每个帐户的电子邮件地址-理想情况下,
filter
当然只返回一个帐户(或者不返回,这对
forEach
很好)。如果您希望筛选表达式和筛选返回更多帐户的内容,
forEach
当然也可以正常工作。

旁注:通过将列表实例化为:list list=new ArrayList()来编写接口代码;同样,如果在Java7+上,您可以使用菱形操作符,而不是另一面:使用Pascal case作为类名@Ricky所说的依赖项反转。如果你想了解更多的上下文,请查看坚实的原则。我尝试了你的方法,即使ArrayList为空,它也会返回正值。但后来我意识到我正在使用getEmployeeId()从textfield中获取文本,并从account类中获取Id。我换了一个,你的方法非常好!
list.stream()
    .filter(x -> x.getEmployeeId().equals("001"))
    .forEach(x -> x.setEmail("ab@c.de"));