【问题标题】:java Most efficient way to generate a nested report? [closed]java生成嵌套报告的最有效方法? [关闭]
【发布时间】:2012-11-20 19:51:38
【问题描述】:

我的列表包含具有以下字段的 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

-橡木, 54, 43,600.00

有 3 个房间的房子:1

-Mainstreet,1890 年,52,000.00 美元

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

【问题讨论】:

    标签: java sorting reporting


    【解决方案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 个房间的列表房屋;

    那么你就完成了。

    【讨论】:

    • 所以我可以使用我的列表作为价值类型,而我的房间计数作为关键。完美而简单!谢谢
    【解决方案2】:

    您可以编写一个自定义的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 类对列表进行排序。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 抱歉,我现在选择不使用任何外部收藏。 @Pawel Solarski 的回答很完美。感谢您的建议。
      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      相关资源
      最近更新 更多