0

マイ リストには、次のフィールドを持つ House オブジェクトが含まれています。

private Integer address;
private String street;
private double price;
private int rooms;

部屋数、その部屋数の家屋の数、およびそれらの家屋のリストを一覧表示するレポートを生成したいと考えています。以下と同様。

2部屋の家: 3

-メインストリート、1112、$45,000.00

-メインストリート、1456、$42,200.00

-オーク、54、43,600.00

3部屋の家:1

-メインストリート、1890年、$52,000.00

部屋と数量のキー ペアを含むハッシュマップを考え、そのハッシュマップを使用して配列を作成していましたが、一連のループを実行するよりも簡単な方法が必要です。助言がありますか?

4

3 に答える 3

1

部屋の数を比較し、価格をタイブレーカーとして使用するカスタムコンパレータを作成できます。このようなもの

class HouseComparator implements Comparator<House>{
    public int compare(House a,House b){
        int value = Integer.compare(a.rooms, b.rooms);
        if (value == 0)
        {
             value = Double.compare(a.price, b.price);
        }
        return value;
    }
}

これを使用して、Collectionsクラスでリストを並べ替えることができます。

于 2012-11-20T20:18:19.590 に答える
1

これはあなたが必要とするものです:

Map<Integer, List<House>> map = new HashMap<Integer, List<House>>();

次に、リストを1回繰り返して、マップを作成します。

for(House h: houses){
    List<House> l = map.get(h.rooms);
    if(l==null){ 
        l = new ArrayList<House>();
        map.put(h.rooms, l);
    }
    l.add(h);
}

map.get(3)は、3つの部屋を持つリストハウスを返します。

その後、完了です。

于 2012-11-20T19:56:43.773 に答える
0

探しているデータ構造は MultiMap です。JavaのGuavaにはいくつかの実装があります。@Pawel Solarski からの内部リストを処理します。

これにより、レポートを実行するためにすべてのデータが整理されます。

于 2012-11-20T20:05:36.967 に答える