我试图弄清楚如何制作这样的结构: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);
}
}
这可以很好地创建一个只有不同日期的单个列表,但是它不会将具有相同日期的对象排序到它们自己的组中,我认为这在某种程度上超出了我的知识范围。有人可以帮帮我吗?
答案 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();
}
}