すべての値はスペースで区切られたMap
asに格納されるString
ため、後処理する必要がありますMap
(つまり、読み取りが終了した後に処理します)...
基本的に、各値を抽出し、スペース文字で分割して、並べ替えにString[]
使用Arrays#sort
します。値を再現String
し、指定されたキーの値として戻します。
例えば...
for (String name: map.keySet())
{
String key = name.toString();
String value = map.get(name).toString();
String[] parts = value.split(" ");
Arrays.sort(parts);
StringBuilder sb = new StringBuilder(value.length());
for (String part : parts) {
if (sb.length() != 0) {
sb.append(" ");
}
sb.append(part);
}
map.put(key, value);
}
から始める方が簡単かもしれませんSortedMap<String, SortedSet<String>>
。SortedMap<String, String>
そうすれば、ファイルを読み取っているときに値を並べ替えることができますが、使用しているマップを生成するには、ファイルを後処理する必要があります。
もちろん、これは重複値がないことを前提としています;)
重複する値がある場合は、SortedMap<String, List<String>>
代わりに使用できます。ただし、マップのロードが完了したら、マップを後処理する必要があります。 Collections.sort(List) を使用してList
、各キーに関連付けられたものをソートし、必要な値をMap
生成しString
ます...
ソートセットの例
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("datasone.txt"));
Map<String, SortedSet<String>> map = new TreeMap<String, SortedSet<String>>();
String currentLine;
while ((currentLine = reader.readLine()) != null) {
String[] pair = currentLine.split("\\s+");
String key = pair[0];
String value = pair[1];
SortedSet<String> set = map.get(key);
if (set == null) {
set = new TreeSet<String>();
map.put(key, set);
}
set.add(value);
}
for (String name : map.keySet()) {
String key = name.toString();
SortedSet<String> set = map.get(key);
StringBuilder sb = new StringBuilder(128);
sb.append(key).append(":");
for (String value : set) {
sb.append(" ").append(value);
}
System.out.println(sb.toString());
}
} catch (IOException exp) {
exp.printStackTrace();
} finally {
try {
reader.close();
} catch (Exception e) {
}
}
読み方は...
A1BG G5730
A1BG A4527
A1BG E3732
A1BG B0166
BCA3 C1478
BCA3 A4172
BCA3 D8974
BCA3 B1432
BCA3 E2147
DB8C N0124
DB8C K7414
DB8C X9851
そして生成...
A1BG: A4527 B0166 E3732 G5730
BCA3: A4172 B1432 C1478 D8974 E2147
DB8C: K7414 N0124 X9851