首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java集合排序BigDecimal

Java集合排序BigDecimal
EN

Stack Overflow用户
提问于 2012-06-29 00:01:45
回答 1查看 3.5K关注 0票数 1

我正试着用ArrayList来分类BigDecimal,然后碰到一块砖墙。我有一门课看起来有点像这样:

代码语言:javascript
复制
public class deal implements Comparable<deal>{

protected BigDecimal bdPrice;
protected int iQuantity;
protected String sDealType;
protected UUID dealUniqueID;
protected int dealID;
protected BigDecimal bdUnitPrice;

public deal(){
    bdPrice         = new BigDecimal("0");
    bdUnitPrice     = new BigDecimal("0");
    iQuantity       = 1;
    sDealType       = "Single item";
    dealUniqueID    = UUID.randomUUID();
    dealID          = 0;
}

private void setUnitPrice(){
    this.bdUnitPrice = this.bdPrice.divide(new BigDecimal(this.iQuantity));
}

public BigDecimal compareTo(deal oDeal) {
    // TODO Auto-generated method stub
    return bdUnitPrice.compareTo(oDeal.getUnitPrice());
}

public boolean equals(deal oDeal) {
    if (!(oDeal instanceof deal))
        return false;
    deal oD = (deal) oDeal;

    return this.bdUnitPrice.equals(oD.bdUnitPrice);
}
}

我主要的Android活动是这样的:

代码语言:javascript
复制
public class SupermarketDealsActivity extends Activity {
private ArrayAdapter<deal> itemAdapter;
private ListView lvDeals;
private ArrayList<deal> itemArray;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    SetUpView();
}

private void SetUpView(){
lvDeals                     = (ListView)this.findViewById(R.id.listDeals);

    itemArray                   = new ArrayList<deal>();
    itemArray.clear();

    itemAdapter                 = new ArrayAdapter<deal>(this, android.R.layout.simple_list_item_1,itemArray);
    lvDeals.setAdapter(itemAdapter);
}

private void CreateADeal(int iQuantity, BigDecimal bdPrice) {
    deal oDeal                  = new deal();

    oDeal.setQuantity(iQuantity);
    oDeal.setPrice(bdPrice);

    CreateListDeals(oDeal);
}

private void CreateListDeals(deal oDeal){
    itemArray.add(oDeal);
    Collections.sort(itemArray,Collections.reverseOrder());
    itemAdapter.notifyDataSetChanged();
}
}

在我的java类中,我的compareTo方法出现了一个错误,它说:

类型不匹配:无法从int转换为BigDecimal

我一定是在路上错过了什么,是什么?

干杯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 00:11:32

代码语言:javascript
复制
public BigDecimal compareTo(deal oDeal) {
    // TODO Auto-generated method stub
    return bdUnitPrice.compareTo(oDeal.getUnitPrice());
}

既不匹配接口的签名,也不匹配bdUnitPrice.compareTo的返回类型。改为:

代码语言:javascript
复制
public int compareTo(deal oDeal) {
    // TODO Auto-generated method stub
    return bdUnitPrice.compareTo(oDeal.getUnitPrice());
}

我还应该提几点(从评论中):

  1. 类的名称应该以大写字母开头。有一个"代码约定“文档详细说明了这一点和其他你应该做的事情。
  2. 重写equals --除非也重写hashCode,否则永远不应该重写hashCode--否则,如果将该类的对象放入使用哈希的HashSet、HashMap或其他集合中,就会出现大量问题。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11254521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档