有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是处理元素集合的最佳方法?

我有一个文本文件,其中逐行包含一些对(字符串、字符串):

Country USA
State California
City New York
City Atlanta
County Fairfax
Country Canada
City New York

我的代码应该读取该文件一次,并跟踪密钥(不同的密钥对)的计数,还跟踪每对密钥第一次出现的顺序。最好的方法是什么? 我的法定密码是“国家”、“州”、“市”和“县”。 我应该创建一个像这样的地图吗

Map<String, Pair<Integer,Integer>>

然后将每个密钥添加到地图中,并更新将跟踪计数和顺序的密钥对???还是有更好的方法


共 (2) 个答案

  1. # 1 楼答案

    使用Map<String, Map<Integer,Integer>>

  2. # 2 楼答案

    对我来说,一张地图或一对都不合适,我会有一个内部类:

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Scanner;
    
    import org.apache.commons.lang3.StringUtils;
    
    public class Keys {
    
        public static void main(String[] args) throws FileNotFoundException {
            Scanner scanner = new Scanner(new File("src/main/resources/META-INF/keys"));
            scanner.useDelimiter("\n");
    
            Map<String, EntryInfo> stats = new HashMap<>();
            int lineCount = -1;
            while(scanner.hasNext()){
                final String current = scanner.next();
                lineCount++;
                if(StringUtils.isEmpty(current)){
                    continue;
                }
    
                EntryInfo currentEntryInfo = stats.containsKey(current) ? stats.get(current) : new EntryInfo(lineCount);
                currentEntryInfo.incrementCount();
                stats.put(current, currentEntryInfo);
            }
            scanner.close();
    
            for (String key : stats.keySet()) {
                System.out.println(key + " (" + stats.get(key) + ")");
            }
        }
    
        public static class EntryInfo{
            private int count = 0;
            private int firstLine = 0;
            public EntryInfo(final int firstLine) {
                this.firstLine = firstLine;
            }
            public void incrementCount() {
                this.count++;
            }
            @Override
            public String toString() {
                return "Count : " + this.count + " First line : " + this.firstLine;
            }
        }
    }
    

    它打印:

    Country USA (Count : 1 First line : 0)
    State California (Count : 1 First line : 2)
    City Atlanta (Count : 1 First line : 6)
    County Fairfax (Count : 1 First line : 8)
    Country Canada (Count : 1 First line : 10)
    City New York (Count : 2 First line : 4)