标签: comparator

我可以在不实现Comparable的情况下使用Comparator吗?

是否可以在不实现Comparable类的情况下使用Comparator?例如,如果我有以下内容:

MyClass {

     Comparator comp;

     OrderedListInheritance(Comparator c) {
          this.comp = c;
     }

}
Run Code Online (Sandbox Code Playgroud)

我可以使用comp来比较两个对象吗?如果是这样,我将如何做到这一点?

谢谢...

java comparator

0
推荐指数
1
解决办法
7609
查看次数

按日期比较对象(实现Comparator)

我有一个java People对象:

public class People {

        String lastname;
        String firstname;
        String gender;
        String datebirth;
        String fcolor;

        public People(String lastname, String firstname, String gender,String datebirth, String fcolor) {
                this.lastname = lastname;
                this.firstname = firstname; 
                this.gender = gender;
                this.datebirth = datebirth;
                this.fcolor = fcolor;
        }
        public String getLastname() {
                return lastname;
        }
        public String getFirstname() {
                return firstname;
        }
        public String getGender() {
                return gender;
        }
        public String getFcolor() {
                return fcolor;
        }
        public String getDatebirth() {
                return datebirth;
        }        
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个Comparator来比较datebirth(datebirth有时采用这种格式"2/13/1943",有时采用这种格式"2-13-1943",你能帮我解决一下如何实现它. …

java date comparator

0
推荐指数
1
解决办法
3万
查看次数

Dijkstra算法中使用的优先级队列的比较器类实现?

我正在尝试从CLRS实现Dijsktra的算法 - 算法入门书,但是,我在实现带Comparator接口的优先级队列方面遇到了麻烦.这是我的Vertex课程,你可以看到;

public class Vertex {

    public boolean explored;
    public int vertexID;
    public LinkedList<Vertex> adjacencyList;
    public LinkedList<Edge> edgeSet;
    public int shortestDistance;
    public Vertex predecessor;

    public Vertex(int vertexID){

        this.vertexID = vertexID;
        this.explored = false;
        this.adjacencyList = new LinkedList<>();
        this.edgeSet = new LinkedList<>();
        this.shortestDistance = Integer.MAX_VALUE;
        this.predecessor = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以最初shortestDistance属性被声明为Integer.MAX_VALUE.此外,您可以看到从Comparator实现的类用于优先级队列.

public class WeightComparator implements Comparator<Vertex> {

    @Override
    public int compare(Vertex o1, Vertex o2) {

        return Math.min(o1.shortestDistance, o2.shortestDistance);
    }
}
Run Code Online (Sandbox Code Playgroud)

我确信整个实现由于我的一些测试没有任何逻辑错误,但是,在某些测试中它失败了.我用这个语句创建了对队列的引用

PriorityQueue<Vertex> queue = …

java collections priority-queue comparable comparator

0
推荐指数
1
解决办法
1384
查看次数

如果字符串长度相等,则恢复为自然排序顺序

我正在尝试读取文件,并比较字符串长度.如果两个字符串长度相同,那么我想按自然排序顺序(按字母顺序)对它们进行排序.

这是我正在研究的比较器的片段.一切都完整,减去排序相同长度的字符串.

    Collections.sort(s, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length();
        }
    }); 
Run Code Online (Sandbox Code Playgroud)

感谢任何输入或adivce

java sorting performance comparator

0
推荐指数
1
解决办法
177
查看次数

java TreeSet与自定义比较器无法正常工作

我试图通过TreeSet使用自定义比较器.但是,似乎有些不对劲.无论我是使用自定义等于还是来自比较器的比较,我都会看到重复.任何想法错在哪里?以下是代码:(请查看以下评论​​)

import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;

public class TreemapTest {

    public static void main(String[] args) {

        //Take an array of integers
        int list[] = { 1,2,3,4,2,4,2,5 };

        //Create a list of custom objects
        ArrayList<Element> elements = new ArrayList<Element>();

        //Populate the list with values from int array
        for (int v : list){
            elements.add(new Element(v));
        }

        /** Attempt to create a treeset from the arraylist */
        // Create the Treeset with custom comparator
        TreeSet<Element> nt = new TreeSet<Element>(new Comparator<Element>(){
            public int …
Run Code Online (Sandbox Code Playgroud)

java comparator treeset

0
推荐指数
1
解决办法
765
查看次数

Java:使用方法和比较器将一个数组排序到另一个数组

我试图更好地理解Java中的比较器接口如何与对象和类交互.

我有一个未排序单词的字符串数组.我想将该数组复制到第二个数组,并按字母顺序排列第二个数组.

当我调用Array.sort方法并将第二个数组和比较器对象作为参数传入时, 两个数组最终都按字母顺序排序,我不明白为什么????

这是一个例子:

import java.util.Arrays;
import java.util.Comparator;

public class test2 {

    public static void main(String[] args) {

        // first array is unsorted
        String[] words_unsorted = { "the", "color", "blue", "is", "the",
                "color", "of", "the", "sky" };
        // copy array to another array to be sorted
        String[] words_sorted = words_unsorted;
        // instantiate a reference to a new Comparator object
        Comparator<String> listComparator = new Comparator<String>() { 
            public int compare(String str1, String str2) {
                return str1.compareTo(str2);
            }
        }; …
Run Code Online (Sandbox Code Playgroud)

java arrays sorting string comparator

0
推荐指数
1
解决办法
420
查看次数

切换到Java 8时的比较器问题

我正在从Java 6迁移到Java 8,并注意到Comparator接口特有的一些东西.对此的任何见解都会非常有帮助.

当我切换到Java 8时,对象的顺序在"compare"方法内切换,列表排序失败.我回到java 6,它工作得很好.这是一个测试用例,使用Java 8失败了,并且使用了Java 6.

public class ComparitorTest {

@Test
public void comparatorTest(){
    Record record1 = new Record("First", false);
    Record record2 = new Record("Second", true);
    List<Record> list = new ArrayList<Record>();

    list.add(record1);
    list.add(record2);


    final Comparator<Object> recordComparator = new Comparator<Object>()
            {
                public int compare( Object o1, Object o2 )
                {
                    Record r1 = (Record) o1;
                    Record r2 = (Record) o2;

                    Boolean isReadonly_R1 = r1.getIsReadOnly();
                    Boolean isReadOnly_R2 = r2.getIsReadOnly();

                if( isReadonly_R1.equals( Boolean.TRUE ) )
                    {
                        return 0;
                    }
                    else
                    { …
Run Code Online (Sandbox Code Playgroud)

java sorting comparator java-6 java-8

0
推荐指数
2
解决办法
689
查看次数

使用Lambdas的比较器

我有一个比较器,它检查是否有任何字符串为null并返回-1.如果它们不为null,则进行比较.我希望使用lambda函数实现它.

这是代码:

private SortedSet<Student> studentSet() {
  return new TreeSet<>(new Comparator<Student>() {
   @Override
   public int compare(Student s1, Student s2) {
     if(s1.getName() == null) {
       return -1;
     }
     if(s2.getName() == null) {
       return 1;
     }
     return s1.getName().compareToIgnoreCase(s2.getName());
    }
   });
 }
Run Code Online (Sandbox Code Playgroud)

我知道如何使用lambdas返回一个简单的比较器.我对如何实现上面的代码很困惑.

java lambda comparator java-8

0
推荐指数
1
解决办法
304
查看次数

如何使字母顺序的比较符具有与字母顺序不同的顺序

我的问题是我想比较一些不使用字母排序的字符.这是我的订单关系:A <B <T <Q <C <D <E <F ...

如何为此创建比较器?我必须写下这样的所有案例:

if (char1.equals(char2)) {
            return 0;
        } else if (char1.equals("A")) {
            return -1;
        } else if (char1.equals("B") && char2.equals("A")) {
            return 1;
        } else if (char1.equals("T")
                && (char2.equals("B") || char2.equals("A"))) {
            return 1;
        } else if (char1.equals("Q")
                && (char2.equals("T") || char2.equals("B") || char2
                        .equals("A"))) {
            return 1;
        } else if (char1.equals("C")
                && (char2.equals("Q") || char2.equals("T")
                        || char2.equals("B") || char2.equals("A"))) {
            return 1;
        } else if (char1.equals("D")
                && (char2.equals("C") || char2.equals("Q")
                        || …
Run Code Online (Sandbox Code Playgroud)

java char comparator

0
推荐指数
1
解决办法
329
查看次数

如何用比较器实现Treemap?

我在本课题中遇到的错误已经解决,并在下面的答案部分写下.

问题是TreeMap的下面定义抛出了编译错误,我想知道原因.

Comparator<Student> comparator=new Comparator<Student>() {

            @Override
            public int compare(Student o1, Student o2) {
                // TODO Auto-generated method stub
                if(o1.roll<=o2.roll)
                    return -1;
                else return 1;
            }
        };
        TreeMap<Integer, Student> map=new TreeMap<>(comparator);
Run Code Online (Sandbox Code Playgroud)

我不明白Treemap的实现错误的原因.有谁能解释一下这里发生了什么?

java treemap comparator

0
推荐指数
1
解决办法
265
查看次数