2017-04-21 29 views
0

我将Item对象存储在ArrayList中。 Item类具有一个名为field1的浮动字段。我想以field1的递减顺序从itemsList中检索Item对象。按浮点字段对类对象的ArrayList排序

List<Item> itemsList = new ArrayList<Item>(); 
itemsList.add(new Item(...)); 

这是我的尝试:

public class Item implements Comparable { 

    //... 

    public float compareTo(Item it) 
    { 
     return(similarity - it.similarity); 
    } 
} 

List<Item> sortedItems = Collections.sort(itemsList); 

的问题是,compareTo应该返回int,而我有float。那么,我应该采用哪种方法对float值进行排序?

+0

您是否尝试将float转换为int?使用'Math.round()' –

+0

请参阅此链接:https://www.tutorialspoint.com/java/util/arrays_sort_float.htm – Marievi

+1

如果你这样做,然后漂浮到相同的数字将被视为等于 – Ishnark

回答

1

方法签名应该是:

public int compareTo(Item it) 

而不是返回float。目前你没有实现接口Comparable

最简单的实现是:

public int compareTo(Item it) { 
    return Float.compare(similarity, it.similarity); 
} 
+0

如果是public int compareTo(Item it){ return Float.compare(similarity,it.similarity); }',我得到错误'方法不覆盖...'。 – Dinosaurius

+0

哈是的,你已经删除了可比较的通用位。将你的类改为'public class Item implements Comparable ',它应该可以正常工作。 – assylias

0

campareTo()确切的返回值并不重要。它可以低于0,恰好为0或大于0.例如,对于每个低于0的差值,您可以返回-1,对于每个大于0的差值,1和最后0为0.

由于Float已经可比较这很容易:similarity.compareTo(it.similarity)

0

compareTo假设只返回3个可能的值。 1,0,-1。 1表示该对象比正在比较的要大,0表示它们相等,-1表示该对象比它所比较的​​要小。所以你的compareTo方法应该很简单。

public int compareTo(Item it) 
    { 
     if(this.field1 < it.getField1()) { 
      return -1; 
     } 
     else if(this.field1 > it.getField1()) { 
      return 1; 
     } 
     else { 
     return 0; 
     } 
    } 
+0

我不能分配'@ Override',而类实现了Comparable。 – Dinosaurius

+0

你在说什么? – victor

+1

@victor'compareTo'可以返回它想要的任何'int',而不仅仅是-1,0和1. – assylias