使用多个元素

时间:2017-03-31 14:42:50

标签: java string list sorting date

我正在java中为类项目制作待办事项列表。在jList中,我显示一个日期和一个字符串,表示日期和当天需要完成的事情。我还希望能够按照它们上的日期对这些事件进行排序,以便更早到期的任务首先出现。我知道如何使用冒泡排序对日期列表进行排序,但我不知道如何将其应用于我的列表,因为每个项目都包含日期和字符串。这是我到目前为止的代码。有谁知道我将如何按顺序排序日期并保持字符串附加到他们的日期。谢谢。

public class ToDoListManager {

    final int maxitems = 20;
    int items = 0;
    String[] toDoList = new String[20];
    Date[] Dates = new Date[20];

    String addItem(String toDo, Date date) {
        if (items == maxitems) {
            return ("No more Space");
        } else if (toDo.equalsIgnoreCase("") || (toDo == null) || (date == null)) {
            return ("All fields required");
        } else if (items < maxitems) {
            Dates[items] = date;
            SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-MM-dd");
            toDoList[items] = "On " + dt1.format(date) + " " + toDo;
            items = items + 1;
            return (toDo + " Was Added to the List");
        }
        return null;
    }

    void Order(Date[] dates) {
        Date temp;
        boolean fixed = false;
        while (fixed == false) {
            fixed = true;
            for (int i = 0; i < dates.length - 1; i++) {
                if (dates[i].before(dates[i + 1])) {
                    temp = dates[i + 1];
                    dates[i + 1] = dates[i];
                    dates[i] = temp;
                    fixed = false;
                }
            }

        }
        System.out.println(dates);

    }

    String[] getItems() {
        String[] displayList = new String[items];
        for (int i = 0; i < items; i++) {
            displayList[i] = toDoList[i];

        }

        return displayList;

    }
}

4 个答案:

答案 0 :(得分:1)

为什么不使用Date-&gt; String&gt;的排序地图?

答案 1 :(得分:1)

你在问题​​中提到了JList,因此我假设你想看到排序的TODO。这是一种可能的方法:

JList由ListModel<E>实例支持。这是一个泛型类,可以包含E的实例列表。因此,将它连接在一起的可能方法是:

  • 创建一个表示待办事项列表中项目的类(类ToDo,其中包含包含日期和toDo文本的字段)。
  • 定义ToDo实例的一个或多个比较器 - 例如一个基于日期,另一个基于文本,无论您需要什么。
  • 使用您的ToDo实例填充List(或其他集合),并使用您的一个比较器对其进行排序。
  • 创建由列表支持的ListModel实现,并将其设置为JList组件。 ListModel实现可以是例如AbstractListModel的延伸。另请参阅example of sorted ListModel implementation
  • 要在List中以有意义的方式显示ToDos,请在ToDo类上创建一个toString()实现(JList将调用它来获取对象的字符串表示)或supply your own ListCellRenderer to the JList instance
  • 如果您需要重新排序,请确保每次更改订单时,正确地将ListModel实现notifies JList。

答案 2 :(得分:0)

迈克尔提到的另一种方法是拥有一个对象。那将存储你想要的变量,日期和字符串。如果您将来想要添加另一个变量,您可以轻松地将其添加到对象,而无需编辑存储对象的列表。

public class Todo {

private Date date;
private String info;

public Todo(Date date, String info){
    this.date = date;
    this.info = info;
}

public Date getDate() {
    return date;
}
public void setDate(Date date) {
    this.date = date;
}
public String getInfo() {
    return info;
}
public void setInfo(String info) {
    this.info = info;
}
}

答案 3 :(得分:0)

这大致是我构建应用程序的方式。为简洁起见,我遗漏了ordergetItems方法。

public class ToDoListManager {

    private static class ToDo
    {
        public final String text;
        public final Date   date;
        public ToDo(String text, Date date)
        {
            this.text = text;
            this.date = date;
        }
    }

    final int maxItems = 20;
    final List<ToDo> todos = new LinkedList<>();

    String addItem(String text, Date date) {
        if (todos.size() == maxItems) {
            return ("No more Space");
        } else if (text == null || text.equalsIgnoreCase("") || date == null) {
            return ("All fields required");
        } else if (todos.size() < maxItems) {

            final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            text = "On " + format.format(date) + " " + text;

            todos.add(new ToDo(text, date));

            return (text + " Was Added to the List");
        }
        return null;
    }
}

一旦你抛弃原始数组而转向集合,你开始使用类就可以看到事情变得更加简单了。

现在回答您的问题:使用Collections.sort(todos)

,而不是实施您自己的排序

为了对列表进行适当排序,您需要ToDo来实施Comparable<ToDo>。我会留给你研究和实施。