我有一个文本文件
category1 1 10 101 good1 1
category6 2 11 105 good5 10
category1 5 13 103 good4 6
category3 6 14 102 good2 5
category5 3 12 107 good1 3
category7 4 12 128 good8 1
category3 5 17 134 good5 8
category2 1 19 143 good4 8
category4 2 16 152 good7 8
category5 9 13 163 good8 6
category9 8 14 165 good4 4
category0 5 15 156 good3 12
category2 6 13 147 good7 1
category7 4 12 138 good5 3
category7 3 12 124 good6 9
category8 8 11 102 good9 6
我需要按类别名称对其进行排序。这就是我已经拥有的:
BufferedReader reader = new BufferedReader(new FileReader("/Data.txt"));
Map<String, String> map=new TreeMap<String, String>();
String line="";
while((line=reader.readLine())!=null){
map.put(getField(line),line);
}
reader.close();
for(String val : map.values()){
System.out.println(val);
}
它对文件数据进行排序,但只显示唯一的行,我需要显示所有内容。怎么做?
答案 0 :(得分:2)
将您的数据读入自定义类。为您的类声明hash()和equals()。可选toString()打印类似于输入的输出。将行读入自定义类的对象(使用扫描程序可选),将对象添加到List并使用Collections.sort()和自定义Comparator。
答案 1 :(得分:0)
假设你有独特的行,你可以使用TreeSet - 它会为你排序(字母顺序应该没问题)。
BufferedReader reader = new BufferedReader(new FileReader("/Data.txt"));
Set<String> set=new TreeSet<String>();
String line="";
while((line=reader.readLine())!=null){
set.add(line);
}
reader.close();
System.out.println(set)
答案 2 :(得分:0)
问题是您正在使用Map
的实现。映射只会为一个实例存储给定键的值。如果没有看到getField()
方法的实现,那么当您调用map.put(getField(line),line);
时,具有相同密钥的行会被覆盖。我会使用某种形式的List
代替TreeMap
。
答案 3 :(得分:0)
你可以读取每一行和split(“”),它将为你提供一个包含该行数据的字符串数组,然后你可以检查第一个索引以查看该类别。像你一样使用Hashmap,你可以使用第一个String作为键,并将行添加到可能是Hashmap值的ArrayList,然后将给定类别的所有行添加到ArrayList。
干杯