由于所有值都存储在由空格分隔的Map
as中,因此您必须对它进行后处理(即,在您完成阅读后处理它)...String
Map
基本上,我会提取每个值,将它们在空格字符上拆分为 aString[]
并用于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