【问题标题】:java: ArrayList how order [duplicate]java:ArrayList如何排序[重复]
【发布时间】:2014-10-09 10:06:37
【问题描述】:

我有这门课:

public class Media {
double supporto;
double i_m;
String idSentence;

public Media(double supporto,double i_m,String idSent){
    this.supporto=supporto;
    this.i_m=i_m;
    this.idSentence=idSent;
}


public double getSupporto(){
    return this.supporto;
}

public double getI_m(){
    return this.i_m;
}

public String getIdSentence(){
    return this.idSentence;
}

public String toString(){
    return this.supporto+" - "+this.i_m+" - "+this.idSentence;
}
}

并在 ArrayList 文本中添加这些值​​​:

ArrayList<Media> m=new ArrayList<Media>();
m.add(new Media(0.2545,0.2365,"id002"));
m.add(new Media(0.8745,0.4658,"id005"));
m.add(new Media(0.1599,0.6580,"id0010"));

如何按第一类 Media 的值的降序对这个数组进行排序? 我想得到这个订单:

 0.1599,0.6580,"id0010"
 0.2545,0.2365,"id002"
 0.8745,0.4658,"id005"

编辑

我是这样解决的:

public class Media implements Comparable<Object>{
double supporto;
double i_m;
String idSentence;

public Media(double supporto,double i_m,String idSent){
this.supporto=supporto;
this.i_m=i_m;
this.idSentence=idSent;
}
public double getSupporto(){
return this.supporto;
}
public double getI_m(){
return this.i_m;
}
public String getIdSentence(){
return this.idSentence;
}
public String toString(){
return this.supporto+" - "+this.i_m+" - "+this.idSentence;
}
@Override
public int compareTo(Object arg0) {
    if(this.supporto==((Media) arg0).getSupporto()) return 0;
    else if((this.supporto)>((Media)arg0).getSupporto()) return 1;
    else return -1;
}
}

在 main 方法中,我订购了 m ArrayList:

    Collections.sort(m); 

【问题讨论】:

  • 向我们展示您尝试实现排序的代码。
  • 使用 Comparable 或 Comparator 对 Object 进行排序
  • 实现 Comparable 或 Comparator 并使用 Collections.sort() 方法

标签: java


【解决方案1】:

你需要让水果具有可比性

public class Media implements Comparable<Fruit> {
    public int compareTo(Fruit compareFruit) {

        int compareQuantity = ((Media) compareFruit).getSupporto(); 

        //ascending order
        return this.supporto - compareQuantity;

        //descending order
        //return compareQuantity - this.supporto;
    }
...
}

Arrays.sort(m); 更多信息: http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

【讨论】:

    【解决方案2】:

    您可以使用自己的比较器对其进行排序

        m.sort(new Comparator<Media>() {
    
            @Override
            public int compare(Media o1, Media o2) {
                return Double.compare(o1.getSupporto(), o2.getSupporto());
            }
        });
    

    这将按照您喜欢的方式对其进行排序。如果您在很多方面都需要这个,我建议您创建静态比较器,例如:

    private static Comparator<Media> supportoComparator = new Comparator<Media>() {
    
        @Override
        public int compare(Media o1, Media o2) {
            if (o1 != null && o2 != null) {
                return Double.compare(o1.getSupporto(), o2.getSupporto());
            } else {
                throw new IllegalArgumentException();
            }
        }
    };
    

    上面的代码在Media类中,然后你像这样使用它:

        m.sort(Media.GET_SUPPORTO_COMPARATOR());
    

    完成了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多