1

我真的需要解决一个困扰了 3 天的问题。任何帮助,将不胜感激。

我有一个Car带有品牌模型颜色实例变量的类。
我有一个Preferences带有namebrandmodelcolor实例变量的类。
我有一个preferences(Key = name, value = Car) HashMap,其中包含人的姓名作为键和他们想要驾驶的汽车作为值。
最后,我有一个names包含系统中所有名称的 ArrayList。

我想以某种方式根据他们想要驾驶的汽车对人们的姓名进行分组。
例如,我希望输出类似于:

福特福克斯,2006,蓝色:尼克,比尔,吉姆
欧宝阿斯特拉,2008,黑色:乔,乔治
梅赛德斯 CLK,2009,黑色:史蒂夫,克里斯,约翰

我想到的第一件事是,我可以将所有重复项保存在一个列表中,然后获取该列表的名称,但我发现我无法根据他们喜欢的汽车组成人群。所以,我认为下面的代码根本没有帮助。

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

有什么我可以做的吗?

4

1 回答 1

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 会更容易。

于 2012-12-02T16:32:38.840 回答