2013-06-18 54 views
1

我有一個float數組和一個String數組。 每個浮點值都與特定的字符串匹配。 我想排序float數組使用保持自己的字符串:用於對特定對象數組進行排序的Java比較器類

public static <T> void sort(T[] a,Comparator<? super T> c) 

下面是代碼:

public class ResultVoiceObject 
{ 

    private String frase; 
    private float ranking; 
    public ResultVoiceObject(String f, float r) 
     { 
     this.frase=f; 
     this.ranking= r; 
     } 
    } 
    public class VoiceRecognitionDemo extends Activity 
    { 

     // Populate the wordsList with the String values the recognition engine thought it heard 
     ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);   
     //il Ranking 
     float[] score= data.getFloatArrayExtra(RecognizerIntent.EXTRA_CONFIDENCE_SCORES); 

     ResultVoiceObject[] risultati= new ResultVoiceObject[score.length]; 
     for (i=0; i<risultati.length;i++) 
     {  
      risultati[i]=new ResultVoiceObject(matches.get(i), score[i]);  
     }   
     ResultVoiceObject[] risultatiDaOrdinare= risultati; // risultati contais ResultVoiceObject elements 
        /*sorting*/ 
     } 

我如何排序的排名,並保持自己的字符串?

非常感謝。

+0

請告訴我們你試圖解決 –

+0

這個問題我沒有代碼的代碼,我不知道如何使用Arrays.sort像我的對象。 我以另一種方式解決,但我的經理會喜歡我使用Array.sort(result,Comparator)。我可以嗎? –

+1

是你可以和谷歌將幫助 –

回答

7
ResultVoiceObject[] objects = ... 
Arrays.sort(objects, new Comparator<ResultVoiceObject>() { 

    @Override 
    public int compare(ResultVoiceObject arg0, ResultVoiceObject arg1) { 
     return Float.compare(arg0.getRanking(), arg1.getRanking()); 
    } 

}); 
+0

錯誤:在該行 多個標記 \t - 比較不能被解析爲一個類型 \t - 在類型的方法排序(T [],比較)陣列是不適用的參數 \t(ResultVoiceObject [],新比較(){}) –

+1

'進口java.util.Arrays中; import java.util.Comparator;' – gma

+0

是的,這是真的!所以我刪除了這些工具並比較了方法!我投你的感謝! –

3

假設您有一個getRanking()訪問者專用字段ranking

public class ResultComparator implements Comparator<ResultVoiceObject> { 
    public int compare(ResultVoiceObject r1, ResultVoiceObject r2) { 
    float f1 = r1.getRanking(); 
    float f2 = r2.getRanking(); 
    if(f1 > f2) return 1; 
    else if(f1 < f2) return -1; 
    return 0; 
    } 

} 

Arrays.sort(resultsArray, new ResultComparator()); 
+0

這個。請參閱http://docs.oracle.com/javase/6/docs/api/java/util/Comparator.html – sotix

+0

小心!通過使用算術運算來實現比較器可能會因溢出而導致排序順序錯誤。 –

+1

'(INT)r1.getRanking() - (INT)r2.getRanking();'這意味着即'7.1 == 7.2'? – gma

3

您需要實現Comparator接口。您可以使用Comparator創建多個排序順序。

假設你要根據你的排名進行排序的數組,然後創建一個單獨的類,它實現Comparator

public Class RankingSorter implements Comparator<ResultVoiceObject> { 
    public int compare(ResultVoiceObject one, ResultVoiceObject another){ 
     return (int)(one.getRanking() - another.getRanking()); 
    } 
} 

然後在要排序的數組新的類, 您創建的對象的comparator並將它傳遞至收集

RankingSorter rs = new RankingSorter(); 
Collections.sort(yourArray, rs); 

這是sort方法,該方法取comparator的重載的版本。

我曾寫過關於這一段時間以前的完全手冊 http://www.dreamincode.net/forums/topic/174322-the-comparable-and-comparator-interface-part-ii/

這裏是ResultVoicObject類

package com.compare; 

public class ResultVoiceObject { 

private String frase; 
private float ranking; 

public ResultVoiceObject(String f, float r) { 
    this.frase = f; 
    this.ranking = r; 
} 

public String getFrase() { 
    return frase; 
} 

public void setFrase(String frase) { 
    this.frase = frase; 
} 

public float getRanking() { 
    return ranking; 
} 

public void setRanking(float ranking) { 
    this.ranking = ranking; 
} 

@Override 
public String toString() { 
    return "ResultVoiceObject [frase=" + frase + ", ranking=" + ranking 
      + "]"; 
} 

} 

落實Comparator界面如下,您需要實現compare方法

package com.compare; 

import java.util.Comparator; 

    public class RankingSort implements Comparator<ResultVoiceObject> { 

public int compare(ResultVoiceObject one, ResultVoiceObject another){ 
    return (int) (one.getRanking() - another.getRanking()); 
} 
    } 

你可以測試它如下。

package com.compare; 

import java.util.ArrayList; 
import java.util.Collections; 

public class RankingSorterTest{ 

public static void main(String [] args){ 

    ArrayList<ResultVoiceObject> list = new ArrayList<ResultVoiceObject>(); 
    list.add(new ResultVoiceObject("one", 1)); 
    list.add(new ResultVoiceObject("five", 5)); 
    list.add(new ResultVoiceObject("three", 3)); 

    Collections.sort(list,new RankingSort()); 
    System.out.println(list); 

} 
    } 

如果你想使用frase創建一個排序順序,那麼你只需要創建一個新的comparator類並排序,正如我上面

希望排序這會有所幫助...花了很多的努力,從我還:d:d

+0

非常感謝。我解決了你在我的帖子中看到的情況! –

0

我解決了合併雙方answare:

public class VoiceRecognitionDemo extends Activity implements Comparator<ResultVoiceObject { 

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
     ... 
     ResultVoiceObject[] risultati= ...;  
     Arrays.sort(risultati, new Comparator<ResultVoiceObject>() { 
      @Override 
      public int compare(ResultVoiceObject arg0, ResultVoiceObject arg1) { 
       return Float.compare(arg0.getRanking(), arg1.getRanking()); 
      } 
     }); 

    } 


public int compare(ResultVoiceObject lhs, ResultVoiceObject rhs) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

}

其中:

public class ResultVoiceObject 
{ 

private String frase; 
private float ranking; 
public ResultVoiceObject(String f, float r) 
    { 
    this.frase=f; 
    this.ranking= r; 
    } 
} 

另一種方法是:

ADD

import java.util.Arrays;

進口的java.util.Comparator;

REMOVE:實現比較和對比methos出onActivityResult

感謝計算器comunity!

+1

很高興你解決了它:) –

相關問題