0

次の形式の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」に関連付けられているすべてのユーザーを文字列に追加します。文字列は簡単ですが、それらを取得するには、値を簡単に比較して見つけることができるハッシュマップまたは同様のものを使用するのが最善かどうかわかりませんでした。

4

1 に答える 1

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
于 2013-03-26T13:01:11.493 に答える