首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有更有效的方法来使用ArrayList中的计数器来制作HashMap?

有没有更有效的方法来使用ArrayList中的计数器来制作HashMap?
EN

Stack Overflow用户
提问于 2018-05-28 20:18:20
回答 2查看 414关注 0票数 1

我有一个方法,它允许我通过获取AirbnbListing对象来从ArrayList创建HashMap,然后将邻居名称与HashMap中的任何键进行比较。如果它不在hashmap中,我会用一个从1开始的计数器来添加它,如果它已经存在,我会递增计数器。

下面是我的代码,有没有更有效的方法来做到这一点:

代码语言:javascript
复制
    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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-28 20:22:02

使用带有countinggroupingBy收集器作为下游收集器:

代码语言:javascript
复制
priceRangeListing.stream()
                 .collect(groupingBy(AirbnbListing::getNeighbourhood, counting()));

注意,上面的代码会产生一个Map<String, Long>,但是如果你真的想要Map<String, Integer>,那么就使用summingInt收集器作为下游:

代码语言:javascript
复制
priceRangeListing.stream()
       .collect(groupingBy(AirbnbListing::getNeighbourhood, summingInt(e -> 1)));
票数 8
EN

Stack Overflow用户

发布于 2018-05-28 20:26:51

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50566285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档