精华内容
下载资源
问答
  • Comparator比较器的基本用法
    千次阅读
    2020-04-22 15:21:09

    如果需要为列表进行排序,可以考虑使用java.util.Comparator类来完成。使用方法如下:

    
    // 列表元素的定义类
    class TestObject {
      private String name;
      private int age;
      public TestObject(String name, int age) {
        this.name = name;
        this.age = age;
      }
      public void setName(String name) {
        this.name = name;
      }
      public void setAge(int age) {
        this.age = age;
      }
      public String getName() {
        return this.name;
      }
      public int getAge() {
        return this.age;
      }
    }
    
    // 比较器定义类
    class SortComparator implements Comparator<Object> {
      public int compare(Object o1, Object o2) {
        TestObject obj1 = (TestObject) o1;
        TestObject obj2 = (TestObject) o2;
        return obj1.getName().compareTo(obj2.getName());
      }
    }
    
    // 列表排序
    ArrayList<TestObject> list = new ArrayList<TestObject>();
    list.add(new TestObject("张三", 22));
    list.add(new TestObject("李四", 21));
    list.add(new TestObject("王五", 26));
    list.add(new TestObject("赵六", 20));
    SortComparator sortComparator = new SortComparator();
    Collections.sort(list, sortComparator); // 调用此方法后,list中的元素已按照比较器的定义排序完成
    

     

    更多相关内容
  • Comparator比较器用法

    2022-03-24 16:30:02
    这个接口用于自定义比较方法,直接举个栗子: 假设有个小狗类,我们需要根据它的价格作比较 public class Dog { private String name; private int age; private int price; public Dog(String name, int age, ...

    这个接口用于自定义比较方法,直接举个栗子:
    假设有个小狗类,我们需要根据它的价格作比较

    public class Dog {
        private String name;
        private int age;
        private int price;
    
        public Dog(String name, int age, int price) {
            this.name = name;
            this.age = age;
            this.price = price;
        }
    
        public int getPrice() {// 1
            return price;
        }
    
        @Override
        public String toString() {// 2
            return "Dog{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", price=" + price +
                    '}';
        }
    }
    
    1. 为了获取价格,定义price的getter方法
    2. 为了方便查看结果,重写一下toString方法

    然后用一个测试类来定义比较器并使用

    public class Test {
        public static void main(String[] args) {
            Dog[] dogs = {// 3
                    new Dog("d1", 3, 1000),
                    new Dog("d2", 3, 1200),
                    new Dog("d3", 3, 800)
            };
    
            //比较器
            Comparator<Dog> comp = (Dog d1,Dog d2)->{// 4
                return d1.getPrice()-d2.getPrice();
            };
    
            Arrays.sort(dogs,comp);// 5
    
            Arrays.asList(dogs).forEach(System.out::println);// 6
        }
    }
    
    1. 先定义几条狗
    2. 用lambda表达式定义一下比较器的返回内容,返回第一条狗是不是比第二条贵
    3. 用Arrays类的sort方法比较,并传入刚才定义的比较器
    4. 输出一下排序后的结果

    在这里插入图片描述

    展开全文
  • 主要介绍了java比较器comparator使用示例,需要的朋友可以参考下
  • Java 的Comparator比较器用法

    万次阅读 2019-09-03 21:20:45
    1.定义:Comparator是外部比较器,用于比较来对象与对象之间的,两个对象进行比较,多用于集合排序,而Comparable可以认为是一个内比较器,根据对象某一属性进行排序的 2.使用方法 1)定义节点信息 class Node{ ...
    1.定义:Comparator是外部比较器,用于比较来对象与对象之间的,两个对象进行比较,多用于集合排序,而Comparable可以认为是一个内比较器,根据对象某一属性进行排序的

    2.使用方法

    1)定义节点信息

    class Node{
        int x;
        int y;
        Node(int x,int y){
            this.x=x;
            this.y=y;
        }
        @Override
        public String toString() {
            return "Node{" +
                    "x=" + x +
                    ", y=" + y +
                    '}';
        }
    }

    2)比较器方法

    Collections.sort(list, new Comparator<Node>() {
        /**o1-o2为升序序排列,o2-o1为降序排列,若具体到某一字段,则根据该字段进行排列*/
        @Override
        public int compare(Node o1, Node o2) {
            if (o1.x==o2.x) //若x属性相等,根据y来升序
                return o1.y-o2.y;
            return o1.x-o2.x;//x属性不相等,根据x来升序排列
        }
    });

    3)完整代码

    
    import java.util.*;
    
    class Node{
        int x;
        int y;
        Node(int x,int y){
            this.x=x;
            this.y=y;
        }
        @Override
        public String toString() {
            return "Node{" +
                    "x=" + x +
                    ", y=" + y +
                    '}';
        }
    }
    public class Main {
    
        public static void way(int num[],int n){
    
        }
        public static void main(String[] args) {
            Node node4=new Node(2,2);
            Node node3=new Node(2,1);
            Node node1=new Node(1,2);
            Node node2=new Node(1,1);
            Node node5=new Node(3,1);
            Node node6=new Node(3,2);
            ArrayList<Node> list=new ArrayList<>();
            list.add(node1);
            list.add(node2);
            list.add(node3);
            list.add(node4);
            list.add(node5);
            list.add(node6);
            Collections.sort(list, new Comparator<Node>() {
                /**o1-o2为升序序排列,o2-o1为降序排列,若具体到某一字段,则根据该字段进行排列*/
                @Override
                public int compare(Node o1, Node o2) {
                    if (o1.x==o2.x) //若x属性相等,根据y来升序
                        return o1.y-o2.y;
                    return o1.x-o2.x;//x属性不相等,根据x来升序排列
                }
            });
            for (Node node:list
                 ) {
                System.out.println(node.toString());
            }
        }
    }

    3.结果如下

    展开全文
  • Comparator比较器

    2022-04-11 13:33:56
    Comparator使用方法

            关于比较,大家平日了解较多的可能都是基本类型相关的,比如比较个数字啦,首字母排序啦之类的;但大部分时候接收的数据都是被封装成对象的,要对对象中的某个数据进行比较并排序时,就不能随随便便调个Sort方法了。本文主要介绍Comparator接口的使用方法。

    1.概念

            首先要明确,Comparator是一个接口类,我们需要实现该类并重写其中的compare方法,来自定义比较逻辑。那么这个逻辑应该如何编写,看看下面这段。

    //在重写compare的比较逻辑时,只需要记住一个原则:
    //返回-1就是不交换,返回1就是需要交换
    
    //那么看下面的代码
    
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 < o2 ? 1 : -1;
    }
    //当o1<o2时返回1,说明小数需要交换到后面去,那么最终结果应该呈现为降序
    
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 > o2 ? -1 : 1;
    }
    //再看这种情况,当o1>o2时返回-1,不需要交换,说明大数就应放在前面,那么最终结果应该仍然呈现为降序

             在明确了基本的使用逻辑后,就可以构建一个比较器,配合Collections.sort()或Arrays.sort()来对目标数组/列表进行操作了。下面就是一个最简单的升序排列逻辑。

    Collections.sort(stuList, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o1 < o2 ? -1 : 1;
        }
    });
    //Arrays.sort()同理

    2.应用

            那么回到一开始说的,我们需要排序的是一堆对象,比如说一堆学生,要根据他们的学号升序排列,运用Comparator也可以很简单实现。

    //根据学号升序排序
    Collections.sort(stuList, new Comparator<EmStudent>() {
        @Override
        public int compare(EmStudent o1, EmStudent o2) {
            Integer stuNumber1 = Integer.parseInt(o1.getStuNumber());
            Integer stuNumber2 = Integer.parseInt(o2.getStuNumber());
            return stuNumber1 < stuNumber2 ? -1 : 1;
        }
    });

            但如果我们要按学生姓名升序排列呢?

            可能大伙第一反应还是简单的调用Sort方法,但这里是China,我们的名字不是Jack/Rose/Lily,而是张三/李四/王五,那么该如何比较呢?

            这个时候就要用到Comparator的一个实现类:Collator类,这个类主要用于String类型的比较,其中就包含了中文。

    //先使用静态工厂方法来获取Collator的实例对象,指定语言为中文
    Comparator<Object> comparator = Collator.getInstance(Locale.CHINA);
    
    //再将该比较器对象放入sort方法中
    Collections.sort(stuList, new Comparator<EmStudent>() {
        @Override
        public int compare(EmStudent o1, EmStudent o2) {
            return comparator.compare(o1.getStuName(), o2.getStuName());
        }
    });
    //当前排序模式为升序,如需要降序排序,则将o2放在前,o1放在后

    展开全文
  • 简单的用commons的jar包,运用其中Comparator方法,希望对你有所帮助。
  • Collections.sort(people, new Comparator() { public int compare(People o1, People o2) { return o1.getAge().compareTo(o2.getAge()); } }); System.out.println(people); } } 输出:[People{age=21, name=‘彭...
  • 比较器Comparator用法

    千次阅读 2021-09-08 23:46:42
    使用优先队列时,我们可以自定义比较器,构造方法如下,这是在做leetcode.502题时遇到的,有思路,但是不会实现,现在用这篇文章记录一下: // 构造方法 public PriorityQueue(Comparator<? super E> ...
  • 首先,我们还是需要...import java.util.Comparator; import java.util.Objects; public class Person{ private String name; private int age; //工资 private int salary; @Override public String toString
  • Java的Comparator比较器用法总结
  • Java中比较器Comparator使用
  • 需求是采用带参构造方法 所以我们可以采用匿名内部类的方法 因为compare方法是在测试类中,所以这里用this的话指的是TreeSetDemo这个测试类,而不是学生类,所以用Student s1,Student s2两个学生对象 ...
  • Collections的静态sort方法只能对Java中某些默认的类型进行升序排序...Comparable比较器是在自定义类中实现Comparable接口,并重写compareTo方法,下面我们自定义一个Person类: public class Person implements Com
  • comparatTo比较方法 Comparator 接口 Comparable接口 如果使用不了sort 排序 则需要 实现 Comparable<> 接口
  • Comparator--比较器

    2021-08-14 22:29:05
    Comparator--比较器前言一、Comparator概念二、使用方法总结 前言 今天在看系统自代堆的定义的时候发现了一个好东西,值得分享,那就是比较器 一、Comparator概念 定义: Comparator是外部比较器,用于比较来...
  • 比较器Comparator使用

    2017-02-10 22:13:47
    Comparator其实是一个策略类的模式,在java中如果需要将方法1作为参数传递给方法2那么在没有出现lambda表达式的时候,其实还有一种方式可以实现,那就是使用接口的方式,如比较器接口Comparator 如:class Test { ...
  • NULL 博文链接:https://chaoyi.iteye.com/blog/2082723
  • 1.ArrayList嵌套 1.1 在集合中存放集合,和二维数组类似 ArrayList<ArrayList> arraylList=new ArrayList<>(); 2.Set集合 ...1.HashSet集合中的元素通过hash值来比较,通过集合元素hashCod
  • (比较器)Comparator比较器

    千次阅读 2021-01-14 19:20:07
    Comparator比较器 Comparator属于一种挽救的比较器支持,其主要目的是解决一些没有使用Comparable排序的类的对象的排序操作。 范例:程序项目已经开发完成了,并且由于先期的设计并没有去考虑到比较器功能 class...
  • Java8提供了comparator比较器新特性: 支持集合中的信息进行自定义排序 定义一个类(当操作数据库时, 可以针对数据库映射到实体类进行排序): package com.jiucheng.utils; /** * person * * @auther qiaoba * @...
  • 优先队列 java中的优先队列使用堆实现的,所以优先队列我们通常是拿来当大顶堆小顶堆使用 大顶堆和小顶堆的作用就是当我们想要获取大量数据的前几个最大或者最小的数据时...在java中优先队列的创建方法: //创建优先
  • Comparable和 Comparator都是用来实现集合中元素的比较、排序的两种比较器接口,这两种比较器很相似,只是 Comparable 是在集合内部定义的方法实现的排序,可称之为内比较器,而Comparator 是在集合外部实现的排序,...
  • 文章目录Java-Comparator比较器-中文排序一、前言二、正文 Java-Comparator比较器-中文排序 一、前言 JDK:1.8 参考: https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html ...
  • java.util.Comparator比较器接口,如果我们需要控制某个类的次序并且该类本身不支持排序,那么就可以建立一个类比较器来进行排序,实现方式很简单只需要实现java.util.Comparator接口。java.util.Comparator接口只...
  • Java Comparator | 比较器比较器功能方法:compare(T o1, T o2)1. 使用 Lambda 表达式定义 compare2. 自定义 compare 实现比较器比较器使用Stream.sortedCollections.sortList.sortArrays.sort比较器方法1. ...
  • Comparable和Comparator接口都可用作普通意义上对象间的比大小,但两个接口在实例化方面的用法不尽相同,接下来我们就来详细对比Java中的Comparable排序接口和Comparator比较器接口
  • sebastian/comparator This component provides the functionality to compare PHP values for equality. Installation You can add this library as a local, per-project dependency to your project using ...
  • java中Comparator使用:对用户集合进行排序,先按照年龄大小排序,若年龄相等,则按照姓名排序 标签: 代码片段(2)[全屏查看所有代码] 1. [代码][Java]代码  ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,687
精华内容 22,674
关键字:

comparator比较器用法