Tag: 比较器

如何在java中获得比较器的反转

在一个方法中,我收到一个通用object E extends Comparable作为参数。 现在我想创建两个优先级队列。其中一个使用E使用的comparator和其他使用E使用的comparator相反的队列(即如果E使用’ =’)。 请告诉我如何创建两个这样的队列。 queue2=new PriorityQueue(0,Collections.reverseOrder(e)); 我收到reverseOrder不适用的错误。 请帮忙

使用Comparable和Comparator比较generics类型

我遇到了头疼我调试有困难。 我试图比较两个通用值,以便我可以根据值将它们插入到数组中。 这是我第一次使用Comparable和Comparator接口,因此围绕这些问题的任何其他建议都会很棒。 这就是我的课程设置方式: public class SVStore<K, V extends Comparable> implements Pairs, Iterable, Comparable, Comparator { put()方法: @Override public V put(K key, V value) { SVData tab[] = table; for (int i = 0; i < table.length – 1; i++) { if (value.compareTo(tab[i].dataValue) <= 0) { int index = i; for( int j = index; […]

将对象类型和字段传递给比较器

是否可以编写一个Comparator以便我可以传递Object类型,字段类型和我想要排序的字段? 我对http://www.davekoelle.com/files/AlphanumComparator.java进行了一些小的更改,以适应对象类型User String类型的字段email的排序。 我有这个代码有效。 public class Main { public static void main(String[] args) { List users = new ArrayList(); users.add(new User(7, “user1”, “user1@c.com”)); users.add(new User(11, “user20”, “user20@c.com”)); users.add(new User(5, “admin20”, “admin20@c.com”)); users.add(new User(10, “user11”, “user11@c.com”)); users.add(new User(6, “admin21”, “admin21@c.com”)); users.add(new User(12, “user21”, “user21@c.com”)); users.add(new User(8, “user2”, “user2@c.com”)); users.add(new User(1, “admin1”, “admin1@c.com”)); users.add(new User(3, “admin10”, “admin10@c.com”)); […]

实现Java优先级队列

public class PriorityQueue { private PriorityNode head, tail; private int numItems; public PriorityQueue(){ numItems = 0; head=null; tail=null; } public void add(int priority, T value){ PriorityNode newNode = new PriorityNode(priority,value); if(numItems == 0){ head = newNode; tail = newNode; } else{ head.setNext(newNode); head = newNode; } } } 其中PriorityNode定义为: public class PriorityNode implements Comparable { […]

尝试使用Comparator按名称排序,忽略大小写,以及先出现空值

我在使用Java 8 Comparator类对项目列表进行排序时遇到问题。 我目前的工作比较如下: comparator = Comparator.comparing(Person::getName, Comparator.nullsFirst(Comparator.naturalOrder())); 这有效:它首先按名称对列表进行排序。 但是,我现在试图忽略名称的情况。 我知道我可以编写一个新的getter,它返回全部小写的名称,但我不想采用这种方法,因为我必须为多个属性执行此操作。 在线查看,看起来我应该使用String.CASE_INSENSITIVE_ORDER ,但我看到的唯一示例不包括null排序规范。 我可以这样做: comparator = Comparator.comparing(Person::getName, String.CASE_INSENSITIVE_ORDER); 但是,每当我尝试包含Comparator.nullsFirst我最终都会遇到类型错误,并对如何继续感到困惑。 我试过做一个类似的链 thenComparing(Comparator.nullsFirst(Comparator.naturalOrder)) 但这也行不通。 有人可以给我一些建议,告诉我如何将这些链接在一起按名称排序(不区分大小写),然后对空值进行排序。 我似乎对这些类型感到困惑。

“目录优先”命令的比较器

我很难过……假设我有这个目录树: {someRoot}/ {someRoot}/bar/ {someRoot}/bar/file1.txt {someRoot}/foo/ {someRoot}/foo/baz/ {someRoot}/foo/baz/file3.txt {someRoot}/foo/abracadabra.txt {someRoot}/foo/file2.txt {someRoot}/aardvark.txt {someRoot}/food.txt {someRoot}/zebra.txt 你会注意到订购。 叫这个订单1 。 在每个阶段,目录首先出现在文件之前。 ( 注意: bar/file1.txt在foo之前出现,因此在全局范围内,目录并非都在所有文件之前。) 如果我枚举这个目录树,然后递归枚举子目录,我将得到以下List ,订购order2 。 {someRoot}/ {someRoot}/aardvark.txt {someRoot}/bar/ {someRoot}/foo/ {someRoot}/food.txt {someRoot}/zebra.txt {someRoot}/bar/file1.txt {someRoot}/foo/abracadabra.txt {someRoot}/foo/baz/ {someRoot}/foo/file2.txt {someRoot}/foo/baz/file3.txt 如果我创建简单的Comparator : Comparator fc = new Comparator(){ @Override public int compare(File o1, File o2) { return o1.compareTo(o2); } }; 我排序,我从词典排序得到这个排序( order3 ): […]

实现比较方法的规则

像compareTo,必须是“反身,反对称和传递”,是否有任何规则来实现比较方法? 谢谢

“比较方法违反其一般合同”仅在某些情况下被抛出

首先,我知道许多其他线程都描述了这个问题。 但是我无法找到并回答这个问题,为什么不总是抛出这个错误? 让我来描述一下我的意思。 我已经写了一些示例代码来说明这一点: public class Mushroom { public int size; public Mushroom(int size) { this.size = size; } @Override public boolean equals(Object obj) { //this is intentionally false – read in description return false; } } DSA public class MushroomComparator implements Comparator { @Override public int compare(Mushroom o1, Mushroom o2) { // here is […]

为什么不排序(Comparator :: reverseOrder)有效?

以下Stream表达式完美无缺: Stream s = Stream.of(“yellow”,”blue”, “white”); s.sorted(Comparator.reverseOrder()) .forEach(System.out::print);` //yellowwhiteblue 为什么没有与方法引用相同的编译? s.sorted(Comparator::reverseOrder).forEach(System.out::print); Comparator类型不定义此处适用的reverseOrder(String,String)

将binarySearch与Comparator和regex一起使用

我正在尝试编写一个快速搜索来搜索List而不是循环遍历列表并手动检查,我想使用binarySearch执行此操作,但我不知道如何执行此操作。 旧方式: for(String s : list) { if(s.startsWith(“contact.”) return true; } 相反,我想要这样的事情: Collections.sort(list); Collections.binarySearch(list, FindContactComparator()); 有人可以帮我写这个比较器吗? 有没有更好的方法来做这个而不是使用binarySearch?