Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java是生成嵌套报表的最有效方法?_Java_Sorting_Reporting - Fatal编程技术网

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

java是生成嵌套报表的最有效方法?,java,sorting,reporting,Java,Sorting,Reporting,“我的列表”包含具有以下字段的房屋对象: private Integer address; private String street; private double price; private int rooms; 我想生成一个报告,列出房间的数量,有多少房子有那么多房间,然后列出这些房子的清单。与下面类似 有2间房的房屋:3间 -缅斯特里特,1112美元,45000.00美元 -缅斯特里特,1456美元,42200.00美元 -橡树,5443600.00 有3个房间的房屋:1 -缅斯特里

“我的列表”包含具有以下字段的房屋对象:

private Integer address;
private String street;
private double price;
private int rooms;
我想生成一个报告,列出房间的数量,有多少房子有那么多房间,然后列出这些房子的清单。与下面类似

有2间房的房屋:3间 -缅斯特里特,1112美元,45000.00美元

-缅斯特里特,1456美元,42200.00美元

-橡树,5443600.00

有3个房间的房屋:1 -缅斯特里特,1890年,52000.00美元

我想用一个包含房间/数量密钥对的hashmap,然后使用hashmap构建一个数组,但是必须有比运行一堆循环更简单的东西。有什么建议吗?

这是您需要的:

Map<Integer, List<House>> map = new HashMap<Integer, List<House>>();
Map Map=newhashmap();
然后在列表上迭代一次以构建地图

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);
}
用于(房屋h:房屋){
列表l=map.get(h.rooms);
如果(l==null){
l=新的ArrayList();
地图放置(h.rooms,l);
}
l、 加(h);
}
地图。get(3)将返回有3个房间的列表房屋


然后您就完成了。

您正在寻找的数据结构是一个多重映射。在for java中有几种可用的实现。它为您处理@Pawel Solarski的内部列表

这将使您的所有数据组织起来,以便在其上运行您的报告。

您可以编写一个自定义程序,比较房间数量,然后使用价格作为平分条件。像这样的

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;
    }
}
类HouseComarator实现Comparator{
公共设施(a栋、b栋){
int值=整数。比较(a.rooms,b.rooms);
如果(值==0)
{
价值=双倍。比较(a.价格,b.价格);
}
返回值;
}
}

您可以使用它对列表进行分类。

这样我就可以使用我的列表作为值的类型,使用我的房间计数作为键。完美而简单!谢谢你,我现在选择不使用任何外部收藏@帕维尔·索拉斯基的回答是完美的。谢谢你的建议。