1

3日間立ち往生している問題を本当に解決する必要があります。どんな助けでも大歓迎です。

brandmodel、およびcolorインスタンス変数を持つCarクラスがあります。namebrandmodel、およびcolorインスタンス変数 を持つクラスがあります。 私は(Key = name, value = Car) HashMap を持っています。これには、キーとして人々の名前が含まれ、値として運転したい車が含まれています。 最後に、システム内のすべての名前を含む ArrayList があります。
Preferences
preferences
names

どういうわけか、運転したい車に応じて人々の名前をグループ化したい.
たとえば、出力を次のようにしたい:

フォード フォーカス、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 に答える