按对象属性对元素进行分组

时间:2012-12-02 16:26:46

标签: java

我真的需要解决一个问题,我已经坚持了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);
    }
}

我有什么可以做的吗?

1 个答案:

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