草庐IT

comparator

全部标签

java - 如何处理 Java 8 比较器中的空值和重复值?

我有一个Photo对象:publicclassPhoto{@IdprivateStringid;privateLocalDateTimecreated;privateIntegerpoNumber;}对于一组照片或一组中的所有照片,poNumber可以为空。我想根据poNumber对一组照片进行排序,让最低的poNumber出现在排序后的集合中。poNumber也可以在集合中重复。如果poNumber重复,则根据创建的顺序排序(最早创建的照片首先出现)。如果poNumber为null,则根据创建的排序。我尝试了下面的代码:SetorderedPhotos=newTreeSet(Comp

java - 比较器与 Apache BeanComparator

考虑一个简单的类:classEmployee{Stringname;intsal;....//gettersandsetters}例如,我可以创建一个比较器来对字段名称进行排序。classEmpSortByNameimplementsComparator{@Overridepublicintcompare(Employeee1,Employeee2){returne1.getName().compareTo(e2.getName());}}但是,查看apachecommonsBeanComparator,排序可以通过以下方式实现:BeanComparatorbc=newBeanComp

java - 如何在 Java 中实现一个通用的 `max(Comparable a, Comparable b)` 函数?

我正在尝试编写一个通用的max函数,它需要两个Comparable到目前为止我有publicstatic>Tmax(Ta,Tb){if(a==null){if(b==null)returna;elsereturnb;}if(b==null)returna;returna.compareTo(b)>0?a:b;}编译失败ThemethodcompareTo(capture#5-of?)inthetypeComparableisnotapplicableforthearguments(T)我认为这是在说?在Comparable对于参数a可能被解释为一种类型,对于参数b可能被解释为另一种类型

Java 8 Map.Entry 比较器

我一直在尝试使用lambda表达式在Java8中创建Map.EntryComparator并且发现了一个非常奇怪的行为。Mapmap=newTreeMap();map.put(1,"Hello");map.put(3,"zzzz");map.put(2,"aaaa");map.put(5,"AAAAA");map.put(4,"aaaa");Comparator>com=Comparator.comparing(Map.Entry::getValue);com=com.reversed();Comparator>com2=Comparator.comparing(Map.Entry::

java - 如何在 Eclipse-Helios JDT 中专门抑制 "Comparing identical expressions"

我尝试用注释封闭方法@SuppressWarnings("compareIdentical")但这不起作用(更糟糕的是,注释会导致它自己的Unsupported@SuppressWarnings("compareIdentical")警告!)我知道我可以一直使用@SuppressWarnings("all")但这比我想要的警告抑制更多。FWIW,我从http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.jdt.doc.isv/guide/jdt_api_compile.htm的“警告选项”表中得到了“compareIde

java - Comparable 应该与另一种类型进行比较吗?

我想知道以下是否有有效的用例:classBase{}classAimplementsComparable{//...}接受T类型的集合似乎是一种常见的模式(参见Collections中的许多示例),其中TextendsComparable.但compareTo()的契约(Contract)在技术上似乎无法履行与基类进行比较时,因为无法确保另一个类不会通过矛盾的比较来扩展基类。考虑以下示例:classBase{finalintfoo;Base(intfoo){this.foo=foo;}}classAextendsBaseimplementsComparable{A(intfoo){su

Java 接口(interface)扩展 Comparable

我想要一个接口(interface)A由T参数化A,并且还希望实现它的每个类也实现Comparable(带有T及其子类型)。写成interfaceAextendsComparable似乎很自然,但这不起作用。那我该怎么办呢? 最佳答案 当Comparable出现这意味着你有一个Comparable的实例可以与T的一个(未知)子类型进行比较,并不是说它可以与T的任何子类型相比较。但你不需要那个,因为Comparable可以将自己与T的任何子类型进行比较无论如何,例如一个Comparable可以将自己与Comparable进行比较.所以

java - 使用比较器接口(interface)和 java 8 Streams 进行排序

Parent是Child继承的类。由GrandChild继承。每个类都包含子类的列表(即父类包含子类列表,子类包含孙子类列表)。每个类包含50个属性(attrib1-atrib50)。getChildList()返回Child类型对象的arrayListgetGrandChildList()返回GrandChild类型对象的arrayList设resultSet为Parent列表ListresultSet现在我想根据一些属性对列表进行排序。例如,如果我想根据两个父属性(比如属性1和属性2)对结果集进行排序,我使用此代码。ComparatorbyFirst=(e1,e2)->e2.get

java - 带有 Comparator<?> 参数的 TreeSet 构造函数

在Java’sdocumentationforitsclassTreeSet其中一个构造函数显示为具有以下header:TreeSet(Comparatorc)有人可以帮助解释为什么TreeSet有一个构造函数,它以比较器对象作为参数吗?我不知道为什么要这样做。 最佳答案 以上所有答案都是正确的,但我想补充一点,自定义比较器除了会产生不同的排序外,还会以不同的方式过滤值。由于Set的值是单义的,如果自定义Comparator返回两个值相同,则只有其中一个会出现在Set中:Sets=newTreeSet(newComparator()

Java流排序2个变量升序/降序

我想对seq1升序排序,seq2降序排序,所以我这样做:list=list.stream().sorted(comparing(AClass::getSeq1).thenComparing(AClass::getSeq2).reversed()).collect(toList());但是结果出来了,因为seq1和seq2都是降序排列的。我可以这样做来使seq1升序和seq2降序:sorted(comparing(AClass::getSeq1).reversed().thenComparing(AClass::getSeq2).reversed()真正正确的方法是什么?