使用Java中的Arraylist对重复项进行计数

时间:2018-10-29 21:36:42

标签: java arraylist duplicates counting

我有一个邮政编码文件,其中的邮政编码格式为 邮政编码,城市,县

90001,Los Angeles,Los Angeles
90002,Los Angeles,Los Angeles
90003,Los Angeles,Los Angeles
90004,Los Angeles,Los Angeles
90005,Los Angeles,Los Angeles

我创建了一个列表,其中包含Zipcode类的对象。我正在尝试计算一个县的邮政编码数量并打印出来。像这样:

Los Angeles: 525
San Diego: 189
Orange: 149

这是我到目前为止尝试过的代码:

void printInfo() {
        int count=0;
        Collections.sort(zipcodes);    //natural order of county
        for (int i = 0; i < zipcodes.size()-1;i++)
        {
            for (int j = i+1; j < zipcodes.size(); j++)
            {
                if (zipcodes.get(i).county.equals(zipcodes.get(j).county)) {
                    count++;
                }
            }
            state.add(new County(zipcodes.get(i).county,count));
        }


        Collections.sort(state);
        for (County z: state) {
            System.out.println("County: " + z.county + " " + "Count: " + z.count );     
        }
}

我得到的输出看起来像:     洛杉矶:148     橙色:148     圣地亚哥:148     洛杉矶:149     圣地亚哥:149     .....     洛杉矶:188     圣地亚哥:188     .....     洛杉矶:524

需要帮助。不确定在此循环中我在做什么错。

2 个答案:

答案 0 :(得分:0)

正投计数= 0;在第二个循环之前,如下:

  count = 0;
  for (int j = i+1; j < zipcodes.size(); j++)
     ......

答案 1 :(得分:0)

@MSG 简单得多的解决方案(假设zipCodes是List

    Map<String, Long> processed = zipCodes.stream()
            .collect(Collectors.groupingBy(ZipCode::getCounty, Collectors.counting()
        )                        
    );

    processed.entrySet().stream().forEach(zipCode -> System.out.println(zipCode));