2013-03-26 48 views
0

我有一個Excel以下列格式Excel到腳本 - 數組,列表,哈希映射?

customers users 
    customer1 user1 
    customer1 user2 
    customer2 user3 
    customer3 user4 
    customer3 user5 

我解析到上述字符串的數組。我需要它是在一個字符串這樣

script.bat -c customer1 -u user1 user2 
script.bat -c customer2 -u user3 
script.bat -c customer3 -u user4 user5 

基本上我要檢查所有的「客戶1」,並增加「客戶1」的字符串相關的所有用戶。該字符串很容易,但讓他們在那裏我不確定是否最好使用Hashmap或類似的東西,我可以輕鬆地比較和查找值。

+4

'地圖<字符串,列表>'就可以了,我認爲。 'HashMap'和map實現一樣好,'ArrayList'則是列表。 – ppeterka 2013-03-26 12:46:59

回答

0

使用Map與您的用戶編譯您的獨特客戶,然後在地圖上循環並格式化您的String。使用您輸入的String[]

例子:

public static void main(String[] args) { 
    final String[] strings = {"customer1 user1", 
     "customer1 user2", 
     "customer2 user3", 
     "customer3 user4", 
     "customer3 user5"}; 

    final Map<String, Set<String>> concatentatingMap = new HashMap<String, Set<String>>() { 
     @Override 
     public Set<String> get(Object key) { 
      Set<String> strings = super.get(key); 
      if (strings == null) { 
       strings = new LinkedHashSet<>(); 
       put((String) key, strings); 
      } 
      return strings; 
     } 
    }; 

    for (final String s : strings) { 
     final String[] split = s.split("\\s++"); 
     concatentatingMap.get(split[0]).add(split[1]); 
    } 
    final MessageFormat messageFormat = new MessageFormat("script.bat -c {0} -u {1}"); 
    for (final Entry<String, Set<String>> entry : concatentatingMap.entrySet()) { 
     final String customer = entry.getKey(); 
     final StringBuilder usersBuilder = new StringBuilder(); 
     final Iterator<String> iter = entry.getValue().iterator(); 
     while (iter.hasNext()) { 
      usersBuilder.append(iter.next()); 
      if (iter.hasNext()) { 
       usersBuilder.append(" "); 
      } 
     } 
     System.out.println(messageFormat.format(new Object[]{customer, usersBuilder.toString()})); 
    } 
} 

輸出:

script.bat -c customer3 -u user4 user5 
script.bat -c customer2 -u user3 
script.bat -c customer1 -u user1 user2