2015-04-24 47 views
1

我有3.1 - 3.20的數字。這是設置問題編號如下圖所示在Java中排序對象列表 - 包含十進制數字的字符串對象

List<Line> liner = new ArrayList<>(); 
for(int counter = 0; counter < rpkKode.size(); counter++) { 
    Line linerObj = new Line(); 
    linerObj.setQuestionNmbr(rpkKode.get(counter).getQuestionNumber()); 
    liner.add(linerObj); 
} 

當我打印打印如下: 3.1,3.11,3.12,3.19 ...,3.2,3.20,3.3,3.4

我想按順序打印它。我可以做任何操作(可能使用第三方),這樣我可以按順序將對象排序爲3.1到3.20嗎?

我無法將其轉換爲Double,因爲我需要使用JSTL在屏幕上顯示它,它是在處理1.10,1.20或1.200時遇到問題,以及許多與驗證相關的Jquery問題。

+0

你可以使用'List#sort'函數並編寫你自己的comperator – SomeJavaGuy

回答

0

我使用了NaturalOrderComparator.java - 在Java中執行字符串的'自然順序'比較。

文件版權所有(C)2003 Pierre-Luc Paour。如預期

Map<String, Class> questionsMap = new TreeMap<>(new NaturalNumberComparator()); 

如果任何人有更好的解決辦法好心做共享鏈接(http://svn.codespot.com/a/eclipselabs.org/naomi/trunk/de.uni_mannheim.informatik.swt.naomi.contentcomparator/src/de/uni_mannheim/informatik/swt/naomi/contentcomparator/NaturalOrderComparator.java

下面的代碼將數字進行排序。

1

您可以使用Collections.sort(對象,比較器) 如果默認比較器不適合您,您可以使用自定義比較器以任何順序和所需的任何規則對對象進行排序。

+0

當然他們可以! –

0

你自己比較並用小數點後面的數字比較問題編號。

+0

如果會出現'[3.20,4.10,3.30]'? –

+0

你的比較器先檢查積分部分,然後去小數部分。 – kondu

1

您可以實現媲美接口在Line類:

public class Line implements Comparable<Line> { 

    ... 

    @Override 
    public int compareTo(Line o){ 
     // if question number is type of Integer 
     return Integer.compare(this.getQuestionNumber(), o.getQuestionNumber()); 
    } 
} 

之後,你可以使用Collections.sort(liner);

0

如果你正在處理的唯一的字符串,你可以使用TreeSet中也是如此。

讓我們考慮您的行類,如下:

public class Line implements Comparable<Line> { 

    String questionNo; 

    public Line(String questionNo) { 
     super(); 
     this.questionNo = questionNo; 
    } 

    public String getQuestionNo() { 
     return questionNo; 
    } 
    public void setQuestionNo(String questionNo) { 
     this.questionNo = questionNo; 
    } 

    @Override 
    public int compareTo(Line obj){ 

     String splitted1[] = this.getQuestionNo().split("\\."); 
     String splitted2[] = obj.getQuestionNo().split("\\."); 

     if(Integer.parseInt(splitted2[0]) > Integer.parseInt(splitted1[0])) { 
      return -1; 
     } 

     if(splitted1.length == 0) { 
      return -1; 
     } 

     if(splitted2.length == 0) { 
      return 1; 
     } 

     return this.getQuestionNo().compareTo(obj.getQuestionNo()); 
    } 
} 

現在嘗試,

Set<Line> ts = new TreeSet<Line>(); 
ts.add(new Line("3.1")); 
ts.add(new Line("3.11")); 
ts.add(new Line("3.12")); 
ts.add(new Line("3.19")); 
ts.add(new Line("3.2")); 
ts.add(new Line("3")); 
ts.add(new Line("3.20")); 
ts.add(new Line("3.3")); 
ts.add(new Line("3.4")); 

for (Line line : ts) { 
    System.out.println(line.getQuestionNo()); 
} 

我這樣做是在趕時間。如果您發現任何問題,請告訴我。

+0

這會給出3.11,3.12,3.19,3.2,3.20,3.3,3.4,再次不能解決問題 – fatherazrael

+0

我第一次弄錯你的問題。請看我更新的答案。 – Kartic

+0

更新給出:3 3.1, 3.11, 3.12, 3.19, 3.2, 3.20, 3.3,3.4 。不,這不是解決方案 – fatherazrael

相關問題