2013-03-26 106 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