2017-11-11 36 views
0

我有一個大的文件與值對,我想根據第一個值排序它們。例如對數值和使用第一個排序java

1,2 
    3,4 
    1,3 
    5,2 
    1,5 

而且我想根據第一個值對它們進行排序。我該怎麼做?

+0

閱讀文件,分析每一行的第一個數字,他們都比較做這種事。 – BackSlash

+1

這是一個巨大的文件30 gb.It效率高? –

+0

效率取決於您如何編寫代碼。我只給了你指導,因爲沒有代碼或真正的嘗試來解決你的問題。這個想法是,你閱讀文件,解析每行的第一個數字,並用它來執行自定義排序。對其進行編碼,如果您遇到困難或需要一些提示,請回到特定問題。 – BackSlash

回答

1

假設您已經完成了讀取文件並將其存儲到某種類型的集合中的所有樣板代碼。您可以根據每個字符串的第一個值對您的集合進行排序。

TreeSet<String> resultSet = myCollection.parallelStream().sorted(
      Comparator.comparingInt((String e) -> Integer.parseInt(e.substring(0,e.indexOf(","))))) 
      .collect(Collectors.toCollection(TreeSet::new)); 

- 確保積聚到你的臨時回收之前閱讀文件,當你修剪所有的空格,從每個字符串,或者如果你願意,你可以在電話e.substringe.trim().substring(0,e.indexOf(",")))之前修剪。

編輯

將上述溶液假定內myCollection每個串能夠之前或定界符,後具有大於1個的數字。但是,假定,分隔符前後總是有1位數字,則不需要對數據進行排序,而是在讀取文件時使用TreeSet作爲累加器集合,而不是HashSet,因爲它會在添加字符串對象時對數據進行排序到收藏。

+0

如果數字總是一位數字,你也可以這樣做:'Comparator.comparingInt((String e) - > e.charAt(0) - '0')' – BackSlash

+0

這不是1位數字,它是3位數字。我已經使用HashSet 因爲是O(1),然後添加「1,2」,「1,3」,「4,1」。像這樣,它將與HashSet一起工作? –

+0

@MariosNikolaou見編輯,這應該就足夠了。 –

0

嗯,我不知道多少,但我建議一個while/for循環讀取每對(num1,num2)和if (num1>num2){num1 now has the value of num2, and vice versa}。這將命令對。現在,我建議另一個用於/ while循環,通過每對的第一個數字去,和apllies排序算法,例如:

for(int i = 0; i<= numberOfPairs; i++){ 
    int number = firstOfPair[i]; 
    for(int j = i; j<=(numberOfPairs-i; j++){ 
     if(firstOfPair[j] > number){ 
      auciliarVariable = firstOfPair[j]; 
      firstOfPair[j] = firstOfPair[i]; 
      firstOfPair[i] = auxiliarVariable; 
     } 
    } 
} 
相關問題