java生成嵌套报告的最有效方法?

时间:2012-11-20 19:51:39

标签: java sorting reporting

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

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

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

有2个房间的房子:3

-Mainstreet,1112,$ 45,000.00

-Mainstreet,1456,$ 42,200.00

-Oak,54,46300.00

有3个房间的房子:1

-Mainstreet,1890,$ 52,000.00

我在想一个带有房间/数量密钥对的散列图,然后使用散列图来构建一个数组,但是必须比运行一堆循环更容易。有什么建议吗?

3 个答案:

答案 0 :(得分: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个房间的列表房屋;

然后你就完成了。

答案 1 :(得分:1)

您可以编写一个自定义comparator,用于比较房间数,然后将价格用作平局。像这样的东西

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类对列表进行排序。

答案 2 :(得分:0)

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

这样可以整理所有数据,以便在其上运行报告。