我有一个方法,它允许我通过获取AirbnbListing
对象来从ArrayList
创建HashMap
,然后将邻居名称与HashMap
中的任何键进行比较。如果它不在hashmap中,我会用一个从1开始的计数器来添加它,如果它已经存在,我会递增计数器。
下面是我的代码,有没有更有效的方法来做到这一点:
public HashMap<String, Integer> sortHousesInNbrhood(ArrayList<AirbnbListing> priceRangeListing) {
HashMap<String, Integer> housesInNbrhood = new HashMap<>();
for (AirbnbListing listing : priceRangeListing) {
if (housesInNbrhood.isEmpty()) {
housesInNbrhood.put(listing.getNeighbourhood(), 1);
} else if (housesInNbrhood.containsKey(listing.getNeighbourhood())) {
housesInNbrhood.replace(listing.getNeighbourhood(), housesInNbrhood.get(listing.getNeighbourhood()) + 1);
} else {
housesInNbrhood.put(listing.getNeighbourhood(),1);
}
}
return housesInNbrhood;
}
发布于 2018-05-28 20:22:02
使用带有counting
的groupingBy
收集器作为下游收集器:
priceRangeListing.stream()
.collect(groupingBy(AirbnbListing::getNeighbourhood, counting()));
注意,上面的代码会产生一个Map<String, Long>
,但是如果你真的想要Map<String, Integer>
,那么就使用summingInt
收集器作为下游:
priceRangeListing.stream()
.collect(groupingBy(AirbnbListing::getNeighbourhood, summingInt(e -> 1)));
发布于 2018-05-28 20:26:51
public HashMap<String, Integer> sortHousesInNbrhood(ArrayList<AirbnbListing> priceRangeListing) {
HashMap<String, Integer> housesInNbrhood = new HashMap<>();
for (AirbnbListing listing : priceRangeListing) {
housesInNbrhood.compute(listing.getNeighbourhood(), (k, v) -> (v == null) ? 1 : v + 1);
}
return housesInNbrhood;
}
https://stackoverflow.com/questions/50566285
复制相似问题