如何根据对象变量值的清晰度将对象排序/分组到列表中?

时间:2015-03-09 20:40:30

标签: java list dictionary arraylist hash

我试图弄清楚如何制作这样的结构:http://i.imgur.com/w634Ovh.jpg

基本上,列表将包含包含" pickupTime"变量(日期类型)是相等的。这意味着(参考图片)"相等的日期列表1"将包含具有相同pickupTime值的所有对象,而"相等日期列表2"我将做同样的事情,但同等日期列表1"和"平等日期列表2" (等等)会有不同的价值观。

我的用例是能够在界面上显示显示不同日期的顶级视图。单击/点击其中一个不同的日期将显示另一个屏幕,显示具有该日期的对象。

我的代码目前是:

final Set<Reservation> setToReturn = new HashSet<Reservation>();
final Set<Date> set1 = new HashSet<Date>();

                for (Reservation res : result) {
                    if (!set1.add(res.getPickup_time())) {
                        setToReturn.add(res);
                    }
                }

这可以很好地创建一个只有不同日期的单个列表,但是它不会将具有相同日期的对象排序到它们自己的组中,我认为这在某种程度上超出了我的知识范围。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

您是否考虑过在主列表中存储对象列表而不是哈希集? (可能更容易使用,至少是imo)

例如:(伪代码)

get the pickuptime of the object
check to see in the main list if there is a list containing objects with that pickup time
if (above true) {
    add it to said list
} else {
    make a new list with that object
}

如果需要新对象的名称,可以将日期转换为字符串。

这是我写的一个快速程序来演示这个概念。它以字符串的形式接受用户输入,在程序结束时,您将看到结构的打印方式。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String args[]) throws Exception {
        ArrayList<ArrayList> mainList = new ArrayList<ArrayList>();

        Scanner scan = new Scanner(System.in);
        String input = "";

        // in this example, get user input to make a list with
        // you can easily change this to use .getpickuptime()
        // in this case, input would be replaced by the object.
        while (!(input = scan.nextLine()).equals("quit")) {
            // base case - if the list is empty make a new object.
            if (mainList.isEmpty()) {
                ArrayList<String> x = new ArrayList<String>();
                x.add(input);
                mainList.add(x);
            } else {
                boolean added = false;
                // check the lists to see if there's a matching value
                for (ArrayList x : mainList) {
                    // check each arraylists first object 
                    if (x.get(0).equals(input)) { 
                        x.add(input);

                        // change added to true
                        added = true;

                        // you've added the object so quit the for loop.
                        break;
                    }
                }
                // what if you went through all the lists and there was no matching list?
                if (!added) {
                    // make a new list.
                    ArrayList<String> x = new ArrayList<String>();
                    x.add(input);
                    mainList.add(x);
                }
            }
        }

        System.out.println(mainList.toString());

        scan.close();
    }
}