2013-07-11 2 views
0

У меня есть класс Список_массивов содержит значение Струнный слово, Струнный expandedword, двойное доверие, двойной поддержкиMultiple Field Collection Сортировать

Я хочу, чтобы отсортировать ArrayList, основанный на доверии, а затем на основе поддержки.

У меня есть успех можно отсортировать ArrayList на основе доверия, но я не в состоянии сделать новый метод для сортировки ArrayList на основе поддержки

это мой код для сортировки на основе доверия

public class ExpandedTerm implements Comparable<ExpandedTerm> { 
String word; 
String expandedWord; 
double support; 
double confidence; 

public ExpandedTerm (String word,String expandedWord, double confidence,double support){ 
    this.word = word; 
    this.expandedWord = expandedWord; 
    this.support = support; 
    this.confidence = confidence; 
} 

public String getWord(){ 
    return word; 
} 

public String expandedWord(){ 
    return expandedWord; 
} 

public Double getSupport(){ 
    return support; 
} 

public Double getConfidence(){ 
    return confidence; 
} 

@Override 
public int compareTo(ExpandedTerm conf) { 
    return new Double(this.confidence).compareTo(new Double(conf.confidence)); 
} 

Мне не удалось сделать другой метод, например compareTo, для его сортировки на основе значения поддержки. Как отсортировать его сначала по доверию, а затем сделать другой метод для сортировки по значению поддержки?

+3

http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html или [использовать Guava] (http: /docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/ComparisonChain.html). –

+0

+1 для Гуавы, рекомендуется повторное использование кода, когда это возможно –

ответ

3

Пользовательский компаратор для этого. Поскольку compaarar обеспечивает функциональность для сортировки на основе одного типа. здесь ссылка, где вы нашли, когда использовать сопоставимые и comapartor
http://iandjava.blogspot.in/2012/10/comparable-and-comparator.html

Использование множественного comparartor

  • один для уверенности

    public class ConfidanceComparator implements Comparator<ExpandedTerm> { 
     @Override 
     public int compare(final ExpandedTerm o1, final ExpandedTerm o2) { 
      return new Double(o1.confidence).compareTo(new Double(o2.confidence)); 
     } 
    } 
  • один для поддержки

    public class SupportComparator implements Comparator<ExpandedTerm> { 
     @Override 
     public int compare(final ExpandedTerm o1, final ExpandedTerm o2) { 
      return new Double(o1.support).compareTo(new Double(o2.support)); 
     } 
    } 

и использовать Collections.sort(<List>, <comparator>) и вы получите нужный вам список.

ЭТО требуется только в том случае, если вы хотите сортировать либо по доверенности, либо по основам поддержки.
Но если вам требуется, сначала выполните сортировку по доверенности, и если доверенность равна, то проверьте на основе поддержки. то сравнимое достаточно и

public int compareTo(ExpandedTerm conf) { 
    int compare = new Double(this.confidence).compareTo(new Double(conf.confidence)); 

    if (compare == 0) { 
     compare = new Double(this.support).compareTo(new Double(conf.support)); 
    } 
    return compare; 
} 
+0

Не вниз, но серьезно, вы должны расширить свой ответ. –

+0

Все об этом ответе неверно. Нет никакой причины, по которой здесь нельзя использовать 'Comparable'. -1 за ужасный ответ. –

+0

@LuiggiMendoza Я только что обновил свои ан. –

1

Попробуйте этот код для метода CompareTo:

@Override 
public int compareTo(ExpandedTerm other) { 
    Double thisConfidence = new Double(getConfidence()); 
    Double otherConfidence = new Double(other.getConfidence()); 
    int compare = thisConfidence.compareTo(otherConfidence); 

    if (compare == 0) { 
     Double thisSupport = new Double(getSupport()); 
     Double otherSupport = new Double(other.getSupport()); 
     compare = thisSupport.compareTo(otherSupport); 
    } 
    return compare; 
} 

В основном только сравнить «поддержку», если «доверие» равно.

+0

На самом деле, я должен сортировать arraylist на основе доверия. 1. Сортировка по достоверности >>>> затем отсортирован по сортировке арраиста 2. Сортировка по поддержке >>>> затем новый результат сортировка массива –

0

Я видел ваш ответ, который вы хотите отсортировать, и сортировать снова, кроме по-разному, поэтому я предполагаю, что вы хотите добавить пользовательский Компаратор при сортировке. Это то, что вы ищете?

public static void main(String[] args) { 
    ExpandedTerm term1 = new ExpandedTerm("a", "b", 1, 4); 
    ExpandedTerm term2 = new ExpandedTerm("c", "d", 3, 2); 

    List<ExpandedTerm> list = new ArrayList(); 
    list.add(term1); 
    list.add(term2); 

    Collections.sort(list); 
    System.out.println(list); 

    Collections.sort(list, new Comparator<ExpandedTerm>() { 
     @Override 
     public int compare(ExpandedTerm o1, ExpandedTerm o2) { 
      return new Double(o2.confidence).compareTo(new Double(o1.confidence)); 
     } 
    }); 
    System.out.println(list); 
} 

Вот вывод

[[email protected], [email protected]] 
[[email protected], [email protected]] 

Некоторые другие советы: убедитесь, что вы реализуете ToString(), хэш-код() и Equals() функции для вашего ExpandedTerm. Они необходимы для отладки, а также для использования в других коллекциях, таких как HashMap и т. Д.

+0

Вместо нескольких ответов всегда старайтесь сохранять один асинхронный и обновлять его при необходимости. –

Смежные вопросы