2016-03-04 93 views
-2

我有一個包含一些對(字符串,字符串)一行行的文本文件:處理元素集合的最佳方法是什麼?

國家美國
州加利福尼亞
紐約市
亞特蘭大市
縣費爾法克斯
國家加拿大
City New York

我的代碼應該讀取文件並跟蹤密鑰的計數(不同的對),並跟蹤每對的第一次出現的順序。什麼是最好的方式來做到這一點? 我的法定密鑰只是「國家」,「州」,「城市」和「縣」。 我應該創建一個地圖就像

Map<String, Pair<Integer,Integer>> 

然後添加每個鍵進入地圖和更新其要跟蹤計數和秩序對???或者有更好的方法來做到這一點?

+0

你的解釋是非常困惑。你應該首先思考如何準確地描述問題。它會幫助你理解它。正如你所描述的那樣,有「對」的事實根本不影響答案。你只需要一個'LinkedHashSet'。 – Gene

+0

我很困惑。你只需要在那裏存儲「城市」(並增加櫃檯)或一對「紐約市」,並增加櫃檯只爲這一對? – MartinS

回答

0

對我來說是地圖或一對都沒有合適人選,我想有一個內部類:

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) 
0

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

相關問題