我的列表包含具有以下字段的House对象:
private Integer address;
private String street;
private double price;
private int rooms;
我想生成一份报告,列出房间数量,有多少房子有房间数量,然后列出这些房屋。与下面类似。
-Mainstreet,1112,$ 45,000.00
-Mainstreet,1456,$ 42,200.00
-Oak,54,46300.00
-Mainstreet,1890,$ 52,000.00
我在想一个带有房间/数量密钥对的散列图,然后使用散列图来构建一个数组,但是必须比运行一堆循环更容易。有什么建议吗?
答案 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的内部列表。
这样可以整理所有数据,以便在其上运行报告。