按日期和ID </useful>排序ArrayList <可用>

时间:2014-01-30 15:22:13

标签: java sorting arraylist

我需要帮助排序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的方法。

2 个答案:

答案 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界面。

如果VacanzaBeneCenaPrestazione实施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<>();

您的课程VacanzaBeneCenaPrestazione必须实现接口MyInterface,您才能将它们放入数组中。而且,你会避免这些可怕的演员。

然后,您就可以致电Collections.sort(),并实施Comparator<MyInterface>对数据进行排序。