Questions tagged «comparator»

创建对象的通用接口,该对象指定比较其他对象的方式。在实现上使用繁重的问题时使用此标记-标记实现所使用的代码语言。

28
按属性对自定义对象的ArrayList进行排序
我读过有关使用Comparator对ArrayList进行排序的信息,但在所有示例中,人们都在使用 compareTo,根据一些研究都是String的一种方法。 我想按自定义对象的属性之一对ArrayList进行排序:Date对象(getStartDay())。通常,我将它们进行比较,item1.getStartDate().before(item2.getStartDate())因此我想知道是否可以编写类似以下内容的内容: public class CustomComparator { public boolean compare(Object object1, Object object2) { return object1.getStartDate().before(object2.getStartDate()); } } public class RandomName { ... Collections.sort(Database.arrayList, new CustomComparator); ... }
1145 java  sorting  date  comparator 

11
“比较法违反了其一般合同!”
有人可以简单地向我解释一下,为什么这段代码会引发异常,“比较方法违反了它的一般约定!”,我该如何解决? private int compareParents(Foo s1, Foo s2) { if (s1.getParent() == s2) return -1; if (s2.getParent() == s1) return 1; return 0; }
187 java  comparator 

14
如何在Java中使用Comparator进行排序
我学会了如何使用可比对象,但是在使用比较器时遇到了困难。我的代码有错误: Exception in thread "main" java.lang.ClassCastException: New.People cannot be cast to java.lang.Comparable at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at java.util.Collections.sort(Unknown Source) at New.TestPeople.main(TestPeople.java:18) 这是我的代码: import java.util.Comparator; public class People implements Comparator { private int id; private String info; private double price; public People(int newid, String newinfo, double newprice) { setid(newid); …
169 java  sorting  comparator 


12
Android-java-如何按对象内的某个值对对象列表进行排序
我试图按对象内的特定值对对象的数组列表进行排序。什么是做这种事情的最佳方法。我应该将Collections.sort()与某种比较器一起使用吗? 我试图用一个变量中包含的浮点值对对象列表进行排序。 编辑:这是我到目前为止: public class CustomComparator implements Comparator<Marker> { @Override public int compare(Mark o1, Mark o2) { return o1.getDistance().compareTo(o2.getDistance()); } } 错误状态:无法在原始类型double上调用compareTo(double)。 是因为比较器不能返回某种类型以外的任何东西吗?

19
何时使用可比和比较器
我有一个需要在字段上排序的对象列表,例如“分数”。我不加思索地编写了一个实现Comparator的新类,该类可以完成任务并且可以工作。 现在回头看一下,我想知道是否应该让我的类实现Comparable,而不是创建一个实现Comparator的新类。分数是订购对象的唯一字段。 我做的可接受的做法是什么? 正确的方法是“首先让类实现Comparable(用于自然排序),如果需要替代字段比较,然后创建一个实现Comparator的新类”? 如果上面的(2)是正确的,那是否意味着只有在类实现Comparable之后才应该实现Comparator?(假设我拥有原始班级)。

9
Javascript的sort()如何工作?
以下代码如何将该数组按数字顺序排序? var array=[25, 8, 7, 41] array.sort(function(a,b){ return a - b }) 我知道如果计算结果是... 小于0:“ a”被排序为比“ b”低的索引。 零: “ a”和“ b”被视为相等,并且不执行排序。 大于0: “ b”被排序为比“ a”低的索引。 在排序过程中是否多次调用了数组排序回调函数? 如果是这样,我想知道每次将两个数字传递给函数。我假设它首先使用“ 25”(a)和“ 8”(b),然后是“ 7”(a)和“ 41”(b),所以: 25(a)-8(b)= 17(大于零,因此将“ b”排序为比“ a”低的索引):8、25 7(a)-41(b)= -34(小于零,因此将“ a”排序为比“ b”低的索引:7、41 然后如何将两组数字彼此相对排序? 请帮助陷入困境的新手!

4
Java 8 Comparator类型推论非常困惑
我一直在研究Collections.sort和之间的区别list.sort,特别是在使用Comparator静态方法以及lambda表达式中是否需要参数类型方面。在开始之前,我知道我可以使用方法引用Song::getTitle来解决问题,例如,这里的查询不是我想要修复的东西,而是我想要解决的东西,即Java编译器为什么以这种方式处理它。 这些是我的发现。假设我们有一个ArrayListtype Song,添加了一些歌曲,有3种标准的get方法: ArrayList<Song> playlist1 = new ArrayList<Song>(); //add some new Song objects playlist.addSong( new Song("Only Girl (In The World)", 235, "Rhianna") ); playlist.addSong( new Song("Thinking of Me", 206, "Olly Murs") ); playlist.addSong( new Song("Raise Your Glass", 202,"P!nk") ); 这是对两种有效的排序方法的调用,没问题: Collections.sort(playlist1, Comparator.comparing(p1 -> p1.getTitle())); playlist1.sort( Comparator.comparing(p1 -> p1.getTitle())); 一旦开始链接thenComparing,就会发生以下情况: Collections.sort(playlist1, …

10
Java错误:比较方法违反其一般约定
我看到了很多与此有关的问题,并尝试解决了该问题,但是经过一个小时的搜索和大量的试验和错误后,我仍然无法解决。我希望你们中的一些人能抓住问题。 这是我得到的: java.lang.IllegalArgumentException: Comparison method violates its general contract! at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:835) at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:453) at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:392) at java.util.ComparableTimSort.sort(ComparableTimSort.java:191) at java.util.ComparableTimSort.sort(ComparableTimSort.java:146) at java.util.Arrays.sort(Arrays.java:472) at java.util.Collections.sort(Collections.java:155) ... 这是我的比较器: @Override public int compareTo(Object o) { if(this == o){ return 0; } CollectionItem item = (CollectionItem) o; Card card1 = CardCache.getInstance().getCard(cardId); Card card2 = CardCache.getInstance().getCard(item.getCardId()); …

1
使用默认实现的null安全映射比较器
是否有内置的可能性在Java 8中创建空安全的映射比较器而无需编写自己的实现Comparator? 运行以下代码时,它会导致NPE,因为的keyExtractor参数Comparator.comparing()可能返回null值: public class ToSort { private String sortBy; public ToSort(String sortBy) { this.sortBy = sortBy; } public String getSortBy() { return sortBy; } public static void main(String[] args) { // mapping comparator Comparator<ToSort> comp = Comparator.comparing(ToSort::getSortBy); SortedSet<ToSort> set = new TreeSet<>(comp); ToSort o1 = new ToSort("1"); ToSort o2 …

4
反转Java 8中的比较器
我有一个ArrayList并想按降序对其进行排序。我用它的java.util.stream.Stream.sorted(Comparator)方法。这是根据Java API的描述: 返回由该流的元素组成的流,并根据提供的进行排序Comparator。 这种方法给我一种升序排序。我应该更改哪个参数,以使其具有降序顺序?

1
为什么不使用自定义比较器从TreeSet中删除,则会删除较大的项集?
同时使用Java 8和Java 11,将以下内容TreeSet与String::compareToIgnoreCase比较器一起考虑: final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] 当我尝试删除中存在的确切元素时TreeSet,它起作用:所有指定的元素均被删除: languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] 但是,如果我尝试删除的内容超过了中的所有内容TreeSet,则该调用根本不会删除任何内容(这不是后续调用,而是被调用了,而不是上面的代码段): languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] 我究竟做错了什么?为什么会这样呢? 编辑:String::compareToIgnoreCase是有效的比较器: (l, r) -> l.compareToIgnoreCase(r)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.