0

我的列表包含具有以下字段的 House 对象:

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

我想生成一份报告,列出房间数量,有多少房子有房间,然后列出这些房子。类似于下面。

两房的房子:3

-Mainstreet, 1112, $45,000.00

-Mainstreet, 1456, $42,200.00

-橡木, 54, 43,600.00

有 3 个房间的房子:1

-Mainstreet,1890 年,52,000.00 美元

我正在考虑一个带有房间/数量键对的哈希图,然后使用哈希图来构建一个数组,但必须有比运行一堆循环更容易的东西。有什么建议么?

4

3 回答 3

1

这就是你需要的:

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

然后遍历您的列表以构建地图。

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 回答
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 回答
0

您正在寻找的数据结构是 MultiMap。Guava for java中有几种实现。它为您处理来自@Pawel Solarski 的内部列表。

这将整理您的所有数据以运行您的报告。

于 2012-11-20T20:05:36.967 回答