农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述Android排序自定义对象数组相关的知识,希望能为你提供帮助。
我试图根据日期和Class
将Ticket对象的静态数组排序为两个不同的数组。这两个数组将用作填充两个不同list
视图的数据。我只想为每个Class
每个array
对象添加一个Ticket。我得到了一个error
ArrayList<
Ticket>
myUpcomingTickets = new ArrayList<
>
();
ArrayList<
Ticket>
myPastTickets = new ArrayList<
>
();
for (Ticket t : Ticket.getTickets()) {
if (t.getClass().getDate().after(date)) {
if(myUpcomingTickets.isEmpty()){
myUpcomingTickets.add(t);
}else {
for(Ticket t1: myUpcomingTickets) {
if (!t.getClass().getId().equals(t1.getClass().getId())) {
myUpcomingTickets.add(t);
}
}
}
} else {
if(myPastTickets.isEmpty()){
myPastTickets.add(t);
} else {
for(Ticket t2: myPastTickets) {
if (!t.getClass().getId().equals(t2.getClass().getId())) { //Add if not already there
myPastTickets.add(t);
}
}
}
}
}
【Android排序自定义对象数组】错误显示在
Logcat
java.util.ConcurrentModificationException
答案这有一些问题。错误是由此引起的
for(Ticket t2: myPastTickets) {
if (!t.getClass().getId().equals(t2.getClass().getId())) { //Add if not already there
myPastTickets.add(t);
}
}
您不能在当前正在循环的列表中添加或删除。
此外,由于您拥有嵌套循环,此方法会非常慢。
我的建议是1)扩展你的对象hash和equals以使你的对象更容易使用
public class Ticket {
@Override
public int hashCode() {
return getId().hashCode();
}@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Ticket other = (Ticket ) obj;
return other.getId() == this.getId();
}
}
然后你可以这样做:
ArrayList<
Ticket>
myUpcomingTickets = new ArrayList<
>
();
ArrayList<
Ticket>
myPastTickets = new ArrayList<
>
();
for (Ticket t : Ticket.getTickets()) {
if (t.getClass().getDate().after(date)) {
if(!myUpcomingTickets.contains(t)){
myUpcomingTickets.add(t);
}
} else {
if(!myPastTickets.contains(t)){
myPastTickets.add(t);
}
}
}
如果你不需要列表在一个顺序我建议使用hashmap而不是arraylist加速这个
另一答案您正在迭代它们时修改列表(myUpcomingTickets,myPastTickets)! 你能做什么: 1.如果尚未实现,请为Ticket对象实现equals和hashcode 2.使用list.contains(Obj)而不是使用for循环
E.g:
if(!myUpcomingTickets.contains(t)){
myUpcomingTickets.add(t);
}
推荐阅读
- Android arrayList检索数据
- 在Android中的SharedPreferences中存储数组的最有效方法是什么()
- 如何在Electron Framework中实现本机上下文菜单(带有检查元素)
- 如何在Electron Framework中实现类似选项卡的浏览器
- 如何使用Electron下载网络文件,保存并显示下载进度
- 如何在Kali Linux中安装Node.js
- 如何在Electron项目中使用实时重载
- 如何防止系统在Electron Framework中进入暂停(睡眠)模式
- 如何在Kali Linux中使用DirBuster列出网站的目录和文件