我有一个类Arraylist包含值 String word,String expandedword,double confidence,double support
我想基于信心对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那样制作另一种方法,根据支持值对其进行排序。 如何首先通过置信度对其进行排序,然后再使用支持值对其进行排序?
答案 0 :(得分:3)
此用户比较器。由于可比较提供了基于单一类型排序的功能。 这里是您发现何时使用可比较和comapartor的链接 http://iandjava.blogspot.in/2012/10/comparable-and-comparator.html
使用多个比较器
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>)
即可获得所需的列表。
只有在您想要在保密基础或支持基础上进行排序时才需要这样做 但是如果你需要那么首先按照confidance进行排序,如果confidance相等,那么检查支持依据。那么可比性就足够了
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;
}
答案 1 :(得分: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;
}
如果“置信度”相等,基本上只比较“支持”。
答案 2 :(得分:0)
我看到你的回复表示你要排序一次,然后再次排序,不同之处,所以我假设您想在排序时添加自定义Comparator。这是你正在寻找的吗?
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);
}
这是输出
[ExpandedTerm@2eeb3c84, ExpandedTerm@55d2162c]
[ExpandedTerm@55d2162c, ExpandedTerm@2eeb3c84]
其他一些提示:确保为ExpandedTerm实现toString(),hashCode()和equals()函数。这些对于调试以及在HashMap等其他集合中的使用非常重要。