0

因此,我无法弄清楚如何使用我从泛型数组列表提交的信息来更新 TextArea。截至目前,该程序创建了一个新订单:

Order d1 = new Order();

然后用户选择一些数据并按下添加按钮,订单被添加到 TextArea。我遇到的问题是我必须将订单添加到列表中的正确位置并每次更新。我只是按一项排序。我不确定如何使用 CompareTo 方法来做到这一点。

 public void actionPerformed(ActionEvent event) 
 {
     ArrayList<Drink> DrinkArray = new ArrayList<Drink>();

     if (event.getSource() == addcoffeeButton)
     {

         String coffeesize = (String) sizecoffeelist.getSelectedItem();
         double coffeeprice = Double.parseDouble(pricecoffeeTextfield.getText());

         String coffeetype = (String) cuptypecoffeelist.getSelectedItem();
         String coffeecaffeine = (String) caffeineList.getSelectedItem();
         String coffeeroom = (String) roomforcreamList.getSelectedItem();
         String coffeeadditional = additionalflavorList.getText();
         if  ((coffeeadditional.isEmpty()))
             coffeeadditional = "No Additional Flavor";

         Drink d1 = new Coffee(coffeesize, coffeeprice, coffeetype, coffeecaffeine, coffeeroom, coffeeadditional);


          DrinkArray.add(d1);
          orderTextArea.append(d1);

因此,在将饮料添加到数组并打印到文本区域之前,我必须将其添加到正确的位置,但我不太确定该怎么做。

4

2 回答 2

2

我假设Drink实现Comparable. 如果您不知道这意味着什么,请查看 javadocs。

如果这是真的,你可以这样做:

List<Drink> drinks = new ArrayList<Drink>();
// add Drinks
Collections.sort(drinks); // now they're sorted according to your Comparable.

您还可以实例化 aComparator并将其传递给 sorts 方法。

像这样的东西(让 getValue() 函数随心所欲):

public class DrinkComparator implements Comparator<Drink> {
    public int compare(Drink d1, Drink d2) {
       if (d1.getValue() < d2.getValue()) { 
           return -1;
       } else if (d1.getValue() > d2.getValue()) {
           return 1;
       } else {
           return 0;
       }
    } 

    public boolean equals(Object obj) {
        return this.compare(this, (Drink)obj) == 0;
    }  
}
于 2012-10-01T00:08:22.560 回答
0

您基本上需要预先确定插入“对象”的插入点......

看一眼Collections.binarySearch(List<T>, T)

来自 Java 文档

回报:

搜索关键字的索引,如果它包含在列表中; 否则, (-(插入点) - 1)。插入点定义为将键插入列表的点:第一个元素的索引大于键,如果列表中的所有元素都小于指定的键,则为 list.size()。请注意,这保证了当且仅当找到键时,返回值将 >= 0。

于 2012-10-01T00:22:13.880 回答