Java中的排序列表

时间:2010-12-01 11:58:34

标签: java list

我需要在java中对列表进行排序,如下所示:

List包含这样的对象集合,

List list1 = {obj1, obj2,obj3,.....};

我需要具有“最低价值”和“重复名称应该避免”的最终列表。

例如:

List list1 = {[Nellai,10],[Gujarath,10],[Delhi,30],[Nellai,5],[Gujarath,15],[Delhi,20]}

排序后,我需要这样的列表:

List list1 = {[Nellai,5],[Gujarath,10],[Delhi,20]};

我的名单中有2德里(30,20)。但我只需要一个票价最低的德里(20)。

如何在java中做到这一点?

Gnaniyar Zubair

5 个答案:

答案 0 :(得分:4)

如果订单无关紧要,解决方法是使用Map[String, Integer],每次找到新城镇时添加一个条目,每次存储的值小于存储的值时更新值,然后输入zip将所有对分成一个列表。

答案 1 :(得分:1)

我会分两个阶段来完成。

使用自定义比较器对列表进行第一次排序。

其次,遍历列表,对于重复的条目(现在它们彼此相邻,只要你正确地比较你的比较器),删除具有更高值的条目。

答案 2 :(得分:1)

与@Visage答案几乎相同,但顺序不同:

public class NameFare {
    private String name;
    private int fare;
    public String getName() {
        return name;
    }
    public int getFare() {
        return fare;
    }
    @Override public void equals(Object o) {
        if (o == this) {
            return true;
        } else if (o != null) {
            if (getName() != null) {
                return getName().equals(o.getName());
            } else {
                return o.getName() == null;
            }
        }
        return false;
    }
}
....
public Collection<NameFare> sortAndMerge(Collection<NameFare> toSort) {
    ArrayList<NameFare> sorted = new ArrayList<NameFare>(toSort.size());
    for (NameFare nf : toSort) {
        int idx = sorted.getIndexOf(nf); 
        if (idx != -1) {
            NameFare old = sorted.get(idx);
            if (nf.getFare() < old.getFare()) {
                sorted.remove(idx);
                sorted.add(nf);
            }
        }
    }
    Collections.sort(sorted, new Comparator<NameFare>() {
        public int compare(NameFare o1, NameFare o2) {
            if (o1 == o2) {
                return 0;
            } else {
                if (o1.getName() != null) {
                    return o1.getName().compareTo(o2.getName()); 
                } else if (o2.getName() != null) {
                    return o2.getName().compareTo(o1.getName()); 
                } else {
                    return 0;
                }
            }
        }
    });
}

答案 3 :(得分:1)

如果你想避免重复,可能像TreeSet这样的类比List更好。

答案 4 :(得分:0)

我会使用像这样的ArrayList:

ArrayList<Name> listOne = new ArrayList<Name>();
listOne.add(new Name("Nellai", 10);
listOne.add(new Name("Gujarath", 10);
listOne.add(new Name("Delhi", 30);
listOne.add(new Name("Nellai", 5);
listOne.add(new Name("Delhi", 20);

Collection.sort(listOne);

然后创建Name类

    class name implements Comparable
{
private String name;
private int number;

public Name(String name, int number)
{
this.name= name;
this.number= number;
}

public String getName()
{
        return this.name;
}
public int getNumber()
{
        return this.number;
} 
public int compareTo(Object otherName) //  must be defined if we are implementing //Comparable interface
{
 if(otherName instanceif Name)
{
throw new ClassCastException("Not valid Name object"):
}
Name tempName = (Name)otherName;
// eliminate the duplicates when you sort 
if(this.getNumber() >tempName.getNumber())
  {
     return 1;
  }else if (this.getNumber() < tempName.getNumber()){
     return -1;
  }else{
     return 0;
  }
}

}

我没有编译代码,它在这里编辑,所以你应该修复代码。并且还要弄清楚如何消除重复并仅打印最低的副本。

你也需要出汗。