jjzjj

Comparator

全部标签

java - Long 类型未定义方法 compare(long, long)

我需要制作一个Comparator来根据它的long类型的变量之一对我的对象列表进行排序。publicclassParticipantIndexComparatorimplementsComparator{finalListparticipants;publicParticipantIndexComparator(ArrayListnumbersToSort){participants=newArrayList();for(inti=0;i但是returnLong.compare(l1,l2);无效-“方法compare(long,long)未定义Long类型”。看来我做错了。

java - Comparator<String> 必须覆盖父类(super class)方法

我正在制作TreeMap并希望以降序排列。我创建了以下比较器:Comparatordescender=newComparator(){@Overridepublicintcompare(Stringo1,Stringo2){returno2.compareTo(o1);}};我像这样构建TreeMap:myMap=newTreeMap(descender);但是,我收到以下错误:Themethodcompare(String,String)oftypenewComparator(){}mustoverrideasuperclassmethod我从来没有完全理解泛型,我做错了什么?

java - 涉及返回类型、通配符和交集类型的类型推断

我正在尝试声明一个接口(interface),该接口(interface)包含一个方法,该方法将返回实现Comparator的事物列表。和Action,即&Action>ListgetThings();编译正常,但当我尝试调用此方法时出现问题。我希望能够做到这一点:Listthings=getThings();List>things=getThings();当我尝试这样做时,出现以下编译错误:incompatibletypes;noinstance(s)oftypevariable(s)Texistsothatjava.util.Listconformstojava.util.List

java - 适用于TreeSet无区分字段时的比较器

假设我有一个类没有实现Comparable界面像classDummy{}以及此类实例的集合以及该类外部的一些函数,这些函数允许部分比较这些实例(下面将使用映射来实现此目的):Collectioncol=newArrayList();Mapmap=newHashMap();for(inti=0;i现在我想使用TreeSet对这个集合进行排序带有自定义比较器的类:TreeSetsorted=newTreeSet(newComparator(){@Overridepublicintcompare(Dummyo1,Dummyo2){returnmap.get(o1)-map.get(o2);}

Java 8 比较器链与单个属性的反向

我正在使用Comparator对Student对象列表进行排序。我想反转id属性的排序,但是使用reverse()方法将它应用于整个排序。如何让它只发生在id上?到目前为止,这是我的代码:publicListgetStudents(Listevents){ComparatorcomparatorStudents=Comparator.comparing(Student::getCGPA).thenComparing(Student::getName).thenComparingInt(Student::getID).reverse();Liststudents=newArrayList

java - Comparator 是类型类吗?

我一直在阅读Scala中的类型类,并认为我已经很好地掌握了它,直到我想起了Java的java.util.Comparator。如果我理解正确的话,Ordering是类型类的原型(prototype)示例。我能想到的Comparator和Ordering实例之间的唯一区别是比较器必须是显式的,而排序可以而且通常是隐式的。Comparator是类型类吗?我得到(错误的?)印象,即Java实际上没有类型类。这是否意味着类型类需要能够是隐式的?我认为类型类的隐式转换主要是语法糖-尽管它很棒,但它“只是”给了编译器足够的提示-我是不是遗漏了什么?下面的代码示例展示了Comparator如何向没有

java - 是否按非传递比较器 "work"排序?

如果我提供一个不可传递的Comparator会发生什么至Collections.sort?我会遇到无限循环吗?我编写的一个小测试产生了一个输出,但我想确保情况始终如此。问题是在某些情况下,我的比较器会产生循环,在这种情况下我只想确保它不会陷入无限循环。我不关心实际结果。 最佳答案 Javadocs说你必须确保你的比较器是可传递的。如果您提供的比较器不符合要求,那么所有赌注都将被取消。它可能适用于给定的实现,但可能会在另一个实现中可怕地崩溃(C++中的std::sort确实如此)。简而言之,您不应该依赖它工作,即使它对某些或其他示例有

c++ - 在单个类中具有不同类型名称的同一模板的多个特化

我正在将观察者模式作为模板来实现,并希望一个类可以附加不同的监听器类型。问题是似乎不可能在单个类中多次使用不同类型的相同模板。据我了解,这应该是可能的,因为方法名称无论如何都会有不同的类型,所以它们应该被分解成不同的名称。但是我得到的错误不是在链接时,而是在编译时,所以我想知道我做错了什么或者这根本不可能。为了演示这个问题,我写了一个SSCE:#include#includetemplateclassComparator{public:Comparator(void){mCounter=0;};virtual~Comparator(void){};boolequals(ToFirst,

c++ - 如何根据条件对优先级队列使用不同的比较器

我正在处理一个任务,我有一个优先级队列,我希望它像这样工作:if(field=='0')priority_queue,CompareRecordID>pq;elseif(field=='1')priority_queue,CompareRecordNum>pq;elseif(field=='2')priority_queue,CompareRecordStr>pq;elseif(field=='3')priority_queue,CompareRecordNumStr>pq;record_t在哪里:typedefstruct{unsignedintrecid;unsignedintnu

c++ - 在默认参数中使用依赖范围作为 std::less 类型的编译错误

在我添加第二个参数以使其更通用之前,下面的怪物工作正常:templatetypenameIterableType::iteratorGetMinimum(IterableTypecollection,Comparatorcomparator=std::less){typenameIterableType::iteratoriter=collection.begin();typenameIterableType::iteratorresult=iter;for(;iter!=collection.end();++iter){if(comparator(iter,result))resul