Java 对树映射中的值进行排序
我读取一个文本文件并存储在一个树形图中,每个键都有多个值 键:A1BG值:G5730 A4527 E3732 B0166 键:BCA3值:C1478 A4172 D8974 B1432 E2147 键:DB8C值:N0124 K7414 X9851 因为它是树形图,所以我对所有键进行了排序。现在,我想对键对应的所有值进行排序。并将o/p作为 键:A1BG值:A4527 B0166 E3732 G5730 键:BCA3值:A4172 B1432 C1478 D8974 E2147 键:DB8C值:K7414 N0124 X9851 我是java新手,有人能帮我吗。这是我的密码Java 对树映射中的值进行排序,java,Java,我读取一个文本文件并存储在一个树形图中,每个键都有多个值 键:A1BG值:G5730 A4527 E3732 B0166 键:BCA3值:C1478 A4172 D8974 B1432 E2147 键:DB8C值:N0124 K7414 X9851 因为它是树形图,所以我对所有键进行了排序。现在,我想对键对应的所有值进行排序。并将o/p作为 键:A1BG值:A4527 B0166 E3732 G5730 键:BCA3值:A4172 B1432 C1478 D8974 E2147 键:DB8C值:
BufferedReader reader = new BufferedReader(new FileReader("E:\\book\\datasone.txt"));
Map<String, String> map = new TreeMap<String,String>();
String currentLine;
while ((currentLine = reader.readLine()) != null)
{
String[] pair = currentLine.split("\\s+");
key = pair[0];
value = pair[1];
if(map.containsKey(key))
{
value += map.get(key);
}
else
{
map.put(key,value);
}
}
for (String name: map.keySet())
{
String key =name.toString();
String value = map.get(name).toString();
System.out.println(key + " " + value+ " ");
}
BufferedReader=new BufferedReader(新文件阅读器(“E:\\book\\datasone.txt”);
Map Map=newtreemap();
串电流线;
while((currentLine=reader.readLine())!=null)
{
字符串[]对=currentLine.split(\\s+);
密钥=对[0];
值=对[1];
if(地图容器(图例))
{
value+=map.get(键);
}
其他的
{
map.put(键、值);
}
}
for(字符串名称:map.keySet())
{
String key=name.toString();
字符串值=map.get(name.toString();
System.out.println(键+“”+值+“”);
}
如果没有重复的值,则可以将这些值存储为树集
public class TestMap {
public static void main(String[] args) {
List<String> lines = new ArrayList();
lines.add("A1BG G5730");
lines.add("A1BG A4527");
lines.add("A1BG E3732");
lines.add("A1BG B0166");
lines.add("BCA3 C1478");
lines.add("BCA3 A4172");
lines.add("BCA3 D8974");
lines.add("BCA3 B1432");
lines.add("BCA3 E2147");
lines.add("DB8C N0124");
lines.add("DB8C K7414");
lines.add("DB8C X9851");
Map<String, Set<String>> map = new TreeMap<String,Set<String>>();
for(String currentLine : lines){
String[] pair = currentLine.split("\\s+");
String key = pair[0];
String value = pair[1];
if(!map.containsKey(key)){
Set<String> set = new TreeSet<String>();
map.put(key,set);
}
map.get(key).add(value);
}
for (String name: map.keySet())
{
String key =name.toString();
System.out.print(key);
for (String value : map.get(name)){
System.out.print(" " + value);
}
System.out.println();
}
}
}
由于所有值都以空格分隔的
字符串形式存储在映射中,因此您必须对映射进行后期处理(即,在阅读完之后进行处理)
基本上,我会提取每个值,在空格字符上将它们分割成字符串[]
,然后使用数组#sort
对它们进行排序。重新生成字符串
值,并将其设置回指定键的值
例如
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
开始可能更容易。这样,您可以在读取文件时对值进行排序,但仍然需要对文件进行后处理,以生成正在使用的SortedMap
map
当然,这是假设没有重复的值;)
如果存在重复值,则可以使用SortedMap
。但在加载完地图后,您需要使用集合对其进行后期处理。sort(List)可对与地图中每个键关联的列表进行排序,并生成所需的字符串值
分类数据集示例
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: A4527 B0166 E3732 G5730
BCA3: A4172 B1432 C1478 D8974 E2147
DB8C: K7414 N0124 X9851
从未见过SortedMap,也许你指的是SortedSet或List?@Taylor啊,回到床上,我想:它的一个可能的副本将垃圾数据存储到值中。你能帮我弄清楚这件事吗。。
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