前言
又到周一了,疲惫不堪!!!
记录下自己刚开始开发时遇到的问题,集合list中要删除某个特定元素。
我当时没想,直接fori循环遍历,然后直接list.remove(),结果可想而知,
错误案例:
for (int i = 0; i < userArrayList.size(); i++) {
if(userArrayList.get(i).getName().equals("小米")) {
userArrayList.remove(i);
}
}
ArrayIndexOutOfBoundsException
言归正传哈。
介绍几种方式
1.迭代器Iterator
2.stream.filter()
3.list.removerIf()
老规矩,dto,list代码如下(示例):
@Data
public class User {
private Integer age;
private String name;
private Integer sex;
}
List<User> userArrayList = new ArrayList<>();
User user1 = new User();
User user2 = new User();
User user3 = new User();
user1.setName("小米");
user1.setAge(12);
user2.setName("华为");
user2.setAge(13);
user3.setName("苹果");
user3.setAge(15);
userArrayList.add(user1);
userArrayList.add(user2);
userArrayList.add(user3);
}
一、迭代器Iterator?
代码如下(示例):删除name=“小米”
Iterator<User> iterable = userArrayList.iterator();
while (iterable.hasNext()) {
String name = iterable.next().getName();
if (name.equals("小米")) {
iterable.remove();
}
}
二、stream.filter()
代码如下(示例):
List<User> after = userArrayList.stream()
.filter(item -> !item.getName().equals("小米"))
.collect(Collectors.toList());
三、list.removeIf()
userArrayList.removeIf(item ->
item.getName().equals("小米"));
总结
我个人比较习惯stream,功能很强大,但是经过几轮简单测试发现,发现迭代器Iterator效率能更快
至于list.removeIf()很少使用,但不会报ArrayIndexOutOfBoundsException。