2012-09-30 128 views
0

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

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); 

所以我必须将它添加到阵列之前增加饮料中的正确位置和打印到文本区,但我不太清楚如何做到这一点。

+2

你能详细点吗?你没有解释太多......什么是正确的*点?你如何更新“每次”? – oldrinb

+0

一个小的观察,通常在FIFO中处理订单。所以对于这种情况,排序的概念很奇怪,直到客户不是VIP或其他东西。除此之外,您应该尝试创建更多的面向对象。首先用enum替换字符串,字符串应该表示字符序列而不是app的业务逻辑。之后,你应该有生产咖啡对象的工厂,那么如果一些订单普通的B或WNS(白色无糖);-),那么所有这些设置将不是必需的。我建议你阅读这本书“首先设计模式”。 –

回答

2

我假设Drink实现Comparable。看的javadoc,如果你不知道这意味着什么。

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

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

您也可以实例化Comparator并将其传递给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; 
    } 
} 
+0

我有它实现Comparable,但我还没有重写CompareTo方法,如果一个属性的长度,我会怎么去? –

+0

饮料有一个长度?我会猜想你会按照字母顺序排列他们的名字,或酒精含量,或饮料内在的其他属性。长度与什么有关? – duffymo

+0

我只是做一个变量,让我们以Size为例。我知道我将不得不创建一个新的CompareTo方法来比较数组中的所有大小并将它们按特定顺序排列,但我不确定如何执行此操作。 –

0

你基本上需要预先确定在“对象”将被插入插入点......

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

从Java文档

返回:

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