的收藏我想排序基於前兩列值的文件內容:分類收集
我的文件內容爲:
文件名:ComplexMapFileReader.txt
而且conetent是:
B 12 hgjhgjgjgjgjgjhgjgjgjgjgjgj
B 3 jgjdSAGdjgsdKJADJgjfgAJFL
B 6 jygtjgjgjgjgjgjhgjhbj
C 7 uiyuiyikykk
C 2 wrteyytyuiiiiyjhg
A 1 hikhkhkhkjhkhkhjkhkh
A 4 khkhkkhkhkhkhkh
A 2 khkhkhkhkhkhkhkhkhkhkhkhh
A 11 jhgjsGJDGjAGFjgfjgjfgj
A 5 gjgjgsadgajgjDGkkhkhdDKjhkjd
B 5 hdskdhkljdhKAJHDKjahsd
A 12 kjhkdjhfknkjflkjfsdlkjf
C 3 kjhfekJEHFKHefkh
B 34 khkhkjhkjhkqlwwjljlllljj
A 21 iuhEWHRIekhrlkHRKErhwkrhk;h;kfnk.nfas
C 11 jlklkqwwlklklklllklkkkkjjj
我對相同的代碼是:
package CollectionExamples;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class MapFileReader {
private static final String FILENAME = "D:\\ComplexMapFileReader.txt";
public static void main(String[] args) {
BufferedReader br = null;
FileReader fr = null;
Map<Integer, String> innerMap = null;
Map<String, TreeMap> outerMap = new TreeMap();
try {
fr = new FileReader(FILENAME);
br = new BufferedReader(fr);
String sCurrentLine;
br = new BufferedReader(new FileReader(FILENAME));
try {
while ((sCurrentLine = br.readLine()) != null) {
String[] s = sCurrentLine.split(" ");
if (!outerMap.containsKey(s[0])) {
innerMap = new TreeMap();
innerMap.put(Integer.valueOf(s[1]), s[2]);
outerMap.put(s[0], (TreeMap) innerMap);
} else {
innerMap.put(Integer.valueOf(s[1]), s[2]);
outerMap.put(s[0], (TreeMap) innerMap);
}
}
String s0 = null;
String s1 = null;
String s2 = null;
for (Entry<String, TreeMap> map1 : outerMap.entrySet()) {
s0 = map1.getKey();
for (Entry<Integer, String> map2 : innerMap.entrySet()) {
s1 = " "+map2.getKey() + "";
s2 =" "+ map2.getValue();
System.out.println("Each line equals:" + s0 + s1 + s2);
System.out.println("#############");
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
上面的代碼沒有給我想要的結果。但有序當上述文件是在某種形式的像(字母表中的所有B的一起或A的一起),那麼文件內容如下所示給出正確的排序:
B 12 hgjhgjgjgjgjgjhgjgjgjgjgjgj
B 3 jgjdSAGdjgsdKJADJgjfgAJFL
B 6 jygtjgjgjgjgjgjhgjhbj
C 7 uiyuiyikykk
C 2 wrteyytyuiiiiyjhg
A 1 hikhkhkhkjhkhkhjkhkh
A 4 khkhkkhkhkhkhkh
A 2 khkhkhkhkhkhkhkhkhkhkhkhh
A 11 jhgjsGJDGjAGFjgfjgjfgj
A 5 gjgjgsadgajgjDGkkhkhdDKjhkjd
,結果是所期望的。(在排序字母和然後按號碼):
輸出:
Each line equals:A 1 hikhkhkhkjhkhkhjkhkh
#############
Each line equals:A 2 khkhkhkhkhkhkhkhkhkhkhkhh
#############
Each line equals:A 4 khkhkkhkhkhkhkh
#############
Each line equals:A 5 gjgjgsadgajgjDGkkhkhdDKjhkjd
#############
Each line equals:A 11 jhgjsGJDGjAGFjgfjgjfgj
#############
Each line equals:B 1 hikhkhkhkjhkhkhjkhkh
#############
Each line equals:B 2 khkhkhkhkhkhkhkhkhkhkhkhh
#############
Each line equals:B 4 khkhkkhkhkhkhkh
#############
Each line equals:B 5 gjgjgsadgajgjDGkkhkhdDKjhkjd
#############
Each line equals:B 11 jhgjsGJDGjAGFjgfjgjfgj
#############
Each line equals:C 1 hikhkhkhkjhkhkhjkhkh
#############
Each line equals:C 2 khkhkhkhkhkhkhkhkhkhkhkhh
#############
Each line equals:C 4 khkhkkhkhkhkhkh
#############
Each line equals:C 5 gjgjgsadgajgjDGkkhkhdDKjhkjd
#############
Each line equals:C 11 jhgjsGJDGjAGFjgfjgjfgj
#############
但是當文件具有內容下面的一個,我沒有得到期望的結果。我知道它是地圖,它將覆蓋以下情況下的先前值。但有沒有什麼辦法可以更好地解決這個問題。
B 12 hgjhgjgjgjgjgjhgjgjgjgjgjgj
B 3 jgjdSAGdjgsdKJADJgjfgAJFL
B 6 jygtjgjgjgjgjgjhgjhbj
C 7 uiyuiyikykk
C 2 wrteyytyuiiiiyjhg
A 1 hikhkhkhkjhkhkhjkhkh
A 4 khkhkkhkhkhkhkh
A 2 khkhkhkhkhkhkhkhkhkhkhkhh
A 11 jhgjsGJDGjAGFjgfjgjfgj
A 5 gjgjgsadgajgjDGkkhkhdDKjhkjd
B 5 hdskdhkljdhKAJHDKjahsd
A 12 kjhkdjhfknkjflkjfsdlkjf
C 3 kjhfekJEHFKHefkh
B 34 khkhkjhkjhkqlwwjljlllljj
A 21 iuhEWHRIekhrlkHRKErhwkrhk;h;kfnk.nfas
C 11 jlklkqwwlklklklllklkkkkjjj
與您的代碼無需更改任何一行代碼都ComplexMapFileReader.txt給了我同樣的結果。所有按預期排序(首先按字母和數字排序) 僅供參考:我使用java 1.8.0_60,我也使用Jetbrain java IDE(IDEA) – ash
最簡單的方法和更安全的方法是從每行創建對象並保存他們在一個集合中。然後將所需的Comparator傳遞給Collection.sort()方法進行排序。 –