Java创建集合和发生次数

时间:2015-04-30 03:19:54

标签: java

我有一个文本文件,每行代表一个时区。 timezone.txt

我希望我的程序逐行进行并计算整个文件中的时区数量。

示例:

Eastern 
Eastern 
West 
Eastern 
West 
West 
Eastern 
Mountain
West

然后给我一个包含时区和出现次数的列表

[(West, 4), (Eastern, 4), (Mountain, 1)]

程序启动时,不同时区的数量未知。到目前为止,我的代码只能打印每个时区,但不知道如何在java中创建这个数组。

public static void main(String[] args) {

        try {
        BufferedReader in = new BufferedReader( new FileReader("timezones.txt"));

        String line = null;
        while ( (line = in.readLine() ) != null) {
            System.out.println(line);
        }
    } catch (IOException e){
        e.printStackTrace();
    }

}

3 个答案:

答案 0 :(得分:3)

创建Map<String, Integer>以存储与每个时区相关联的计数。当您读取时区名称时,检索以该名称存储的Integer(如果有),递增它,并将更新后的计数存储回地图中。如果地图中没有出现该名称,请将计数存储为1.完成后,您可以检索所有<String, Integer>条目并打印列表。

答案 1 :(得分:1)

您应该使用Map<String, Integer>之类的地图,其中密钥为String,值为Integer。然后循环浏览文件并将String放入Map并计算值。

 while ( (line = in.readLine() ) != null) {
    Integer count= map.get(line);
    map.put(line, count == null ? 1 : count+1);
 }

答案 2 :(得分:1)

使用lambdas:

    try (BufferedReader in = new BufferedReader(new FileReader("timezones.txt"))) {
        Map<String, Integer> map = new HashMap<>();
        in.lines().forEach(line -> {
            Integer count = map.get(line);
            map.put(line, count == null ? 1 : count + 1);
        });
        System.out.println(map);
    } catch (IOException e) {
        e.printStackTrace();
    }

或用于:

        Map<String, Integer> map = new HashMap<>();
        for (String line; null != (line = in.readLine()); ) {
            Integer count = map.get(line);
            map.put(line, count == null ? 1 : count + 1);
        }
        System.out.println(map);