谁可以帮助我使用数组列表中的比较排序?

时间:2017-08-25 13:03:56

标签: java sorting arraylist compareto

大家好我正在制作库存程序,我遇到了stockItem排序方法的问题。我需要用compare来解决它。 到目前为止这是我的代码。请滚动到底部查看我正在谈论的内容。

public class Inventory {
    private ArrayList<StockItem> stock;

    public Inventory() {
        stock = new ArrayList<StockItem>();
    }

    public void addStockItem(StockItem item) {
        stock.add(item);
    }

    public int size() {
        return stock.size();
    }

    public String toString() {
        String result = "";
        for(StockItem item: stock)
            result+=item.toString()+"\n";
        return result;
    }

    public boolean isValidIndex(int index) {
        return index >=0 && index < stock.size();
    }

    /**
     * 
     * @param index
     * @return null if index is not valid, otherwise
     * return item at that index
     */
    public StockItem getItem(int index) {
        if (index < 0 || index >= this.stock.size())// check if this index  exists
            return null; // removes the item the from stock and returns it
        else
            return this.stock.get(index);

    }

    /**
     * 
     * @param index
     * @return null if index is invalid, otherwise remove item at the given
     *         index and return the removed item.
     */
    public StockItem remove(int index) {
        if (index < 0 || index >= this.stock.size()) // check if this index  exists
            return null; // removes the item the from stock and returns it
        else
            return this.stock.remove(index);
    }

    /**
     * sort, using {@link StockItem#compareTo(StockItem)}
     * cannot use built-in sort method from java
     */
    public void sort() {

}

2 个答案:

答案 0 :(得分:0)

我想您要按照尺寸订购商品。您可以使用任何现有算法进行排序,例如selection sortinsertion sortbubble sort。此外,可以使用集合模块中的 Java内置方法,这种方法更快,更容易实现。鉴于您的类正在实现 Comparable interface 及其抽象方法 compareTo(),您可以使用 Collections.sort()方法。您可以手动实现comapreTo()方法,也可以只使用Integer类来实现。我用了第二种方法。我正在构建一个StockItem类,其中包含您需要排序的必要方法和字段。您的库存代码应如下所示:

import java.util.ArrayList;
import java.util.Collections;

public class Inventory {

    private ArrayList<StockItem> stock;

    public Inventory() {
        stock = new ArrayList<StockItem>();
    }

    public void addStockItem(StockItem item) {
        stock.add(item);
    }

    public int size() {
        return stock.size();
    }

    public String toString() {
        String result = "";
        for(StockItem item: stock)
            result+=item.toString()+"\n";
        return result;
    }

    public boolean isValidIndex(int index) {
        return index >=0 && index < stock.size();
    }

    /**
     * 
     * @param index
     * @return null if index is not valid, otherwise
     * return item at that index
     */
    public StockItem getItem(int index) {
        if (index < 0 || index >= this.stock.size())// check if this index  exists
            return null; // removes the item the from stock and returns it
        else
            return this.stock.get(index);

    }

    /**
     * 
     * @param index
     * @return null if index is invalid, otherwise remove item at the given
     *         index and return the removed item.
     */
    public StockItem remove(int index) {
        if (index < 0 || index >= this.stock.size()) // check if this index  exists
            return null; // removes the item the from stock and returns it
        else
            return this.stock.remove(index);
    }

    /**
     * sort, using {@link StockItem#compareTo(StockItem)}
     * cannot use built-in sort method from java
     */
    public void sort() {
        Collections.sort(stock);
    }
}

并且您的StockItem类的代码应类似于以下内容:

    public class StockItem implements Comparable<StockItem>{
    private int size;
    public void setSize(int size) {
        this.size = size;
    }
    public int getSize() {
        return this.size;
    }
    public Integer getSizeNonPrimativeInt() {
        return new Integer(this.getSize());
    }
    @Override
    public int compareTo(StockItem item) {
        return this.getSizeNonPrimativeInt().compareTo(item.getSizeNonPrimativeInt());
    }
}

希望这个帮助;)

答案 1 :(得分:0)

您尚未粘贴 StockItem 类的代码。所以我假设下面有一个示例类,您可以相应地更改代码。让我们假设你的 StockItem 类如下:

class StockItem{

  private String itemName;
  private double itemPrice;

  public String getItemName() {
      return itemName;
  }

  public void setItemName(String itemName) {
      this.itemName = itemName;
  }

  public double getItemPrice() {
      return itemPrice;
  }

  public void setItemPrice(double itemPrice) {
      this.itemPrice = itemPrice;
  }

}

你提到你不能使用Collections中的内置sort()方法,但我想你可能会指出你不能使用sort()方法只是因为它排序而不是你想要的方式?您需要使用自定义排序条件定义比较器对象,并将其传递给内置的sort()方法。

public class Inventory {

private ArrayList<StockItem> stock;

//-- your other code segments

  static class ListComparator implements Comparator<StockItem>{
      @Override
      public int compare(StockItem o1, StockItem o2) {
          if(o1.getItemName().compareTo(o2.getItemName())>0){
              return 1;
          }
          else if(o1.getItemName().compareTo(o2.getItemName())<0){
              return -1;
          }
          else
              return 0;
      } 
  } 

  public void sort() {
      Collections.sort(stock, new ListComparator());
  }
}