我真的需要解决一个问题,我已经坚持了3天。任何帮助将不胜感激。
我的Car
课程包含品牌,模型和颜色实例变量。
我有一个Preferences
课程,其中名称,品牌,模型和颜色实例变量。
我有一个preferences
(Key = name,value = Car)HashMap,其中包含人们的姓名作为键和他们想要作为值驾驶的汽车。
最后我有一个names
ArrayList,它包含系统中的所有名称。
我想以某种方式根据他们想要驾驶的汽车对人们的名字进行分组 例如,我希望输出类似于:
福特焦点,2006年,蓝色:尼克,比尔,吉姆 欧宝雅特,2008,布莱克:乔,乔治 Mercedes CLK,2009,Black:Steve,Chris,John我想到的第一件事是,我可以在列表中保存所有重复项,然后获取该列表的名称,但我发现我不能根据他们喜欢的车形成一组人。所以,我认为下面这段代码根本没有帮助。
Preferences[] p = new Preferences[preferences.size()];
for (int i = 0; i < preferences.size(); i++) {
p[i] = (Preferences) preferences.get(names.get(i));
Car car = new Car(p[i].getBrand(), p[i].getModel(), p[i].getColor());
if (!set.add(car)) { //duplicate
System.out.println("Duplicate!");
listOfDuplicates.add(car);
}
}
我有什么可以做的吗?
答案 0 :(得分:4)
Map<Car, List<String>> namesByCar = new HashMap<Car, List<String>>();
for (Map.Entry<String, Car> entry : preferences) {
String name = entry.getKey();
Car car = entry.getValue();
List<String> names = namesByCar.get(car);
if (names == null) {
names = new ArrayList<String>();
namesByCar.put(car, names);
}
names.add(name);
}
你去......
使用Guava的Multimap会更容易。