jjzjj

Comparator

全部标签

java - 为什么我们可以使用具有泛型引用的数组

在此处回答相关问题时:https://stackoverflow.com/a/9872630/82609我尝试执行以下操作:Comparator[]comparators=newComparator[]{...};有效!但以下不是:Comparator[]comparators=newComparator[]{...};关于相关问题,我做了以下假设:Iguessit'sbecauseinitiallythearraycontractmaybesomethinglikethis:IfyoucreateanarrayoftypeX,youwillNEVEREVERbeabletoputan

java - 无法复制 : "Comparison method violates its general contract!"

我收到以下错误:“比较方法违反了它的一般契约(Contract)!”使用以下比较器时,但是我无法使用jUnit复制异常。我想知道是什么导致了这个问题以及如何复制它。有其他人遇到同样问题但不知道如何复制的例子。publicclassDtoComparatorimplementsComparator{@Overridepublicintcompare(Dtor1,Dtor2){intvalue=0;value=r1.getOrder()-r2.getOrder();if(value==0&&!isValueNull(r1.getDate(),r2.getDate()))value=r1.g

Java Collections.sort() 没有按预期排序

我正在尝试按特定属性对两个不同的对象ArrayLists进行排序(“学生”对象按“程序”排序,“教授”对象按“教师”排序)。这两个类都扩展了我的抽象“Person”类。publicabstractclassPersonimplementsComparable{privateStringname;privateStringadress;//getters,setters,etc.,allworksproperly@OverrideprotectedObjectclone()throwsCloneNotSupportedException{returnsuper.clone();}publ

java - java.util.Comparator 实例的命名约定

假设有一类股票classStock{Stringid;Stringname;}我想创建两个通过id进行比较的比较器和name,分别。Java中的比较器是否有命名约定或最佳实践?跟随名字可以吗?StockByIdComparator和StockByNameComparatorSortStockById和SortStockByName我知道在某些领域会避免重复名称。一个人会选择Liststocks在ListstockList.类型也不应该编码在变量名中(也许是因为IDE的兴起?)。但清晰度也很重要。那么命名比较器的好方法是什么? 最佳答案

具有空字段的 Java 比较器

我有一个实体Entity列表,其中包含字段id和createdDate。我想按以下方式对它们进行排序:优先id如果id为null,则最近的createdDate优先我尝试了以下失败,因为它在id为null时抛出NullPointerExceptionComparatorcomp=Comparator.nullsFirst(Comparator.comparing(e->((Entity)e).getId())).thenComparing(e->((Entitye).getCreatedDate()).reversed();entities.stream().sorted(comp).

java - 如何比较时区

我需要比较时区Asia/SingaporeUTCPacific/Honolulu.我正在使用java.util.TimeZone(它没有实现Comparable)。我对现有实现的搜索没有成功,因为关于比较不同时区的日期的问题太多了。问题什么是Comparator的正确实现?这将解决这个问题(如果适用,它比其他解决方案更好的地方是什么)?请注意,我无法使用JodaTime对于这个问题,所以“使用JodaTime”不是一个有效的答案。为清楚起见进行编辑上面的符号定义不明确。我的特定用例只需要从东到西的天真“地理”排序。正如评论所指出的那样,更高级和通用的解决方案将考虑时间因素,例如夏令时和

java.util.Comparator.naturalOrder 采用 <T extends Comparable<? super T>> 并返回一个 Comparator<T> - 为什么?

(如果这是重复的,请指出正确的答案!我搜索并阅读了几个(>5)个相关问题,但似乎没有一个是正确的。还查看了泛型常见问题解答和其他来源...)当一个集合类接受一个比较器时,它应该具有Comparator类型显然是正确的做法。对于您的参数化类型T.你可以看到很多地方,例如TreeMap.好的。我的问题是使用Comparator.naturalOrder()在TextendsComparable上参数化但返回Comparator.我试图在我的集合类中有一个字段,它包含用户指定的比较器或Comparator.naturalOrder比较器。我无法让它工作。我的所有相关问题是:怎么样Compar

Java 8 HashMap

我有一张mapMap我想在所有列表中找到最大(或最小)值。该函数应返回最大(或最小)值以及属于该值的键。签名可能是publicstaticPairgetKeyValue(Map>map,BinaryOperatorfunction)获取map和函数Double::max或Double::min我如何使用java8streamapi高效(并且漂亮地)实现它? 最佳答案 ABinaryOperator不是该任务的良好规范,可以直接用于减少以产生适当的值,例如最小值或最大值,但它不适合返回关联值,如Map的关键值(value)。以这种方式

java - 按两个标准比较两个对象

这个问题在这里已经有了答案:Javacomparator:Twoorderingcriteria(1个回答)关闭7年前。我有一个包含boolean字段的用户类,我想对用户列表进行排序,我希望boolean字段等于true的用户位于列表的顶部,而不是我想按他们的排序名字。这是我的课:publicclassUser{intid;Stringname;booleanmyBooleanField;publicUser(intid,Stringname,booleanmyBooleanField){this.id=id;this.name=name;this.myBooleanField=myB

java - 我可以使用 Guava 的 ComparisonChain 以特殊方式处理 null 字段吗?

我有一个包含多个字段的ComplexObject,我想这样说:如果两者都存在字段x,则继续比较链中的下一个compare。如果两者都为空,则继续进行比较链中的下一个compare。如果一个为空而另一个不为空,则将空值放在最后我不知道该怎么做,因为据我所知.compare(c1.getX(),c2.getX(),Ordering.arbitrary().nullsLast())将如果对象都存在且相等,则认为它们相等如果两个对象都为空,则认为它们是相等的。有没有一种方法可以使用Guava的ComparisonChain或Ordering类来实现我想要的?或者有没有更好的方法来考虑解决这个问