在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"));