我需要帮助排序ArrayList<Usable>
。 Usable
是一个以4个类实现的接口,其中包含字段ID(即int)和Date(Date变量)。
如何对此ArrayList进行排序?是否可以使用已有的方法,或者我必须自己创建完整的方法?
对于其他方法,我必须将Usable
对象强制转换为类的特定类,以获取返回我想要的值的方法。例如,为了从ArrayList中删除产品,我使用了这种方法:
public void removeProd() {
...
//input product ID by user
...
int i;
boolean lol = false;
for (i=0; i<arr.size(); i++) {
if (arr.get(i) instanceof Vacanza) {
Vacanza v = (Vacanza) arr.get(i);
if (v.getvId() == ident) {
arr.remove(i);
lol = true; //... graphic message} }
else if (arr.get(i) instanceof Bene) {
Bene b = (Bene) arr.get(i);
if (b.getbId() == ident) {
arr.remove(i);
lol = true; //... graphic message}}
else if (arr.get(i) instanceof Cena) {
Cena c = (Cena) arr.get(i);
if (c.getcId() == ident) {
arr.remove(i);
lol = true; //... graphic message}}
else {
Prestazione p = (Prestazione) arr.get(i);
if (p.getpId() == ident) {
arr.remove(i);
lol = true; //... graphic message}}
}
if (lol == false) {
//graphic negative result message
this.removeProd(); }
}
基于此方法,如何按ID和按日期对数组进行排序?每个类都有通过getID()和getDate()返回id和date的方法。
答案 0 :(得分:1)
假设您的Usable
界面如下所示:
public interface Usable {
Date getDate();
Integer getId();
}
您可以像Comparator
那样排序:
Collections.sort(usables, new Comparator<Usable>() {
@Override
public int compare(Usable o1, Usable o2) {
int dateComparison = o1.getDate().compareTo(o2.getDate()); //compare the dates
if (dateComparison == 0) { //if the dates are the same,
return o1.getId().compareTo(o2.getId()); //sort on the id instead
}
return dateComparison; //otherwise return the result of the date comparison
}
});
您似乎没有正确利用Usable
界面。
如果Vacanza
,Bene
,Cena
和Prestazione
实施Usable
,它们应如下所示:
public class Vacanza implements Usable {
private Date date;
private Integer id;
public Date getDate() {
return date;
}
public Integer getId() {
return id;
}
}
如果所有具体实现看起来都是这样(并且如果代码不能编译,则代码不应该编译),那么removeProd()
看起来更像:
int i;
boolean lol = false;
for (i=0; i<arr.size(); i++) {
Usable usable = arr.get(i);
if (usable.getId() == ident) {
arr.remove(i);
lol = true;
}
}
答案 1 :(得分:0)
你必须创建一个像这样的界面:
interface MyInterface {
public int getID();
public Date getDate();
}
实施ArrayList<MyInterface>
代替ArrayList<Object>
:
List<MyInterface> arr = new ArrayList<>();
您的课程Vacanza
,Bene
,Cena
和Prestazione
必须实现接口MyInterface
,您才能将它们放入数组中。而且,你会避免这些可怕的演员。
然后,您就可以致电Collections.sort()
,并实施Comparator<MyInterface>
对数据进行排序。