Java List集合排序实现方法解析

这篇文章主要介绍了Java List集合排序实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.使用 Collections 工具类中的 sort() 方法

参数不同:

void sort(List list) 在自定义类User里面实现Comparable<User>接口,并重写抽象方法compareTo(Student o);

void sort(List list, Comparator c) 第二个参数为了省事,可以直接使用匿名内部类

public class User implements Comparable<User>{ 

  private int score; 

  private int age; 

  public User(int score, int age){
    super();
    this.score = score;
    this.age = age;
  } 

  public int getScore() {
    return score;
  } 

  public void setScore(int score) {
    this.score = score;
  } 

  public int getAge() {
    return age;
  } 

  public void setAge(int age) {
    this.age = age;
  } 

  @Override
  public int compareTo(User o) {
    int i = this.getAge() - o.getAge();//先按照年龄排序
    if(i == 0){
      return this.score - o.getScore();//如果年龄相等了再用分数进行排序
    }
    return i;
  } 

} 

public static void main(String[] args) {
    List<User> users = new ArrayList<User>();
    users.add(new User(78, 26));
    users.add(new User(67, 23));
    users.add(new User(34, 56));
    users.add(new User(55, 23));
    Collections.sort(users);
    for(User user : users){
      System.out.println(user.getScore() + "," + user.getAge());
    }
}
public class Students { 

  private int age;
  private int score; 

  public Students(int age, int score){
    super();
    this.age = age;
    this.score = score;
  } 

  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public int getScore() {
    return score;
  }
  public void setScore(int score) {
    this.score = score;
  }
}
public static void main(String[] args) {
    List<Students> students = new ArrayList<Students>();
    students.add(new Students(23, 100));
    students.add(new Students(27, 98));
    students.add(new Students(29, 99));
    students.add(new Students(29, 98));
    students.add(new Students(22, 89));
    Collections.sort(students, new Comparator<Students>() { 

      @Override
      public int compare(Students o1, Students o2) {
        int i = o1.getScore() - o2.getScore();
        if(i == 0){
          return o1.getAge() - o2.getAge();
        }
        return i;
      }
    });
    for(Students stu : students){
      System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
    }
}

2.直接使用list.sort()方法,传入实现Comparator接口的实现类的实例,为了省事直接传入匿名内部类

public class Students {

  private int age;
  private int score;

  public Students(int age, int score){
    this.age = age;
    this.score = score;
  }

  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public int getScore() {
    return score;
  }
  public void setScore(int score) {
    this.score = score;
  }
}
public static void main(String[] args) {
  List<Students> students = new ArrayList<Students>();
  students.add(new Students(23, 100));
  students.add(new Students(27, 98));
  students.add(new Students(29, 99));
  students.add(new Students(29, 98));
  students.add(new Students(22, 89));

  students.sort(new Comparator<Students>() {
    @Override
    public int compare(Students o1, Students o2) {
      int i = o1.getScore() - o2.getScore();
      if (i == 0) {
        return o1.getAge() - o2.getAge();
      }
      return i;
    }
  });

  for (Students stu : students) {
    System.out.println("score:" + stu.getScore() + ":age" + stu.getAge());
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java根据List内对象的属性排序方法

    方法一:实现Comparator接口,并重写compare方法 实体类代码: import java.util.Comparator; /** * 学生类 方法一 * 实现Comparator接口 * 并重写compare方法 * @author liaot * */ public class Student implements Comparator<Student>{ private String name; //姓名 private int age; //年龄 //重写 比较方法 本次例

  • java中List对象列表实现去重或取出及排序的方法

    前言 因为在面试的时候碰到几次list的去重和排序,觉着有必要给大家总结一下具体的方法,分享出来供大家学习参考,话不多说了,来一起看看下面介绍的一种做法: 一.list去重 1.1 实体类Student List<Student>容量10k以上,要求去重复.这里Student的重复标准是属性相同,因此需要重写equals和hashcode方法,不知道有几个可以手写出来. student的equals方法: public void equals(Object o){ if(this == o)

  • Java8 用Lambda表达式给List集合排序的实现

    Lambda用到了JDK8自带的一个函数式接口Comparator<T>. 准备一个Apple类 public class Apple { private int weight; private String color; public Apple(){} public Apple(int weight) { this.weight = weight; } public Apple(int weight, String color) { this.weight = weight; this.c

  • Java Collections.sort()实现List排序的默认方法和自定义方法

    1.java提供的默认list排序方法 主要代码: List<String> list = new ArrayList();list.add("刘媛媛"); list.add("王硕"); list.add("李明"); list.add("刘迪"); list.add("刘布"); //升序 Collections.sort(list,Collator.getInstance(java.uti

  • Java实现对两个List快速去重并排序操作示例

    本文实例讲述了Java实现对两个List快速去重并排序操作.分享给大家供大家参考,具体如下: 1:去重并排序 package twolist; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.uti

  • java8新特性将List中按指定属性排序过滤重复数据的方法

    在java中常常会遇到这样一个问题,在实际应用中,总会碰到对List排序并过滤重复的问题,如果List中放的只是简单的String类型过滤so easy,但是实际应用中并不会这么easy,往往List中放的是一个类,类中有多个属性,要过滤重复数据,而且这个重复数据要按自己指定的属性过滤,但是要想按照其它属性排序顺序过滤,所以要先排序一下,然后按照某个属性过滤. 实体类如下所示,大家只要创建下面的实体类,无需继承父类,大家不会注解式风格的话,请自行加上getter/setter方法. 首先看看gr

  • java 中List按照date排序的实现

    java 中List按照date排序的实现 今天开发需要对一个list进行排序,要求对里面的date类型的属性进行排序,不多说,直接上代码. Leavecalendar这个bean类里面有属性date: private Date Date; //有get/set方法: public Date getDate() { return Date; } public void setDate(Date lcDate) { this.Date = lcDate; } 排序我们要用到java里面的Colle

  • Java针对ArrayList自定义排序的2种实现方法

    本文实例讲述了Java针对ArrayList自定义排序的2种实现方法.分享给大家供大家参考,具体如下: Java中实现对list的自定义排序主要通过两种方式 1)让需要进行排序的对象的类实现Comparable接口,重写compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用Collections.sort()来排序对象数组 public class Student implements Comparable{ private int id; private int age; p

  • java ArrayList集合中的某个对象属性进行排序的实现代码

    开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student { private int age; private String name; private String weight; public String getWeight() { return weight; } public void setWeight(String weight) { th

  • Java List集合排序实现方法解析

    这篇文章主要介绍了Java List集合排序实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.使用 Collections 工具类中的 sort() 方法 参数不同: void sort(List list) 在自定义类User里面实现Comparable<User>接口,并重写抽象方法compareTo(Student o); void sort(List list, Comparator c) 第二个参数为了省事,可以直接使

  • Java sort集合排序的两种方式解析

    这篇文章主要介绍了Java sort集合排序的两种方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Comparable和Comparator public static <T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序 (我们在自己的类里面实现Comparabl接口方法compareTo) public static <T> void sort(List<T&g

  • java之StringBuffer常见使用方法解析

    StringBuffer 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象. StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问). 由于 StringBuilder 相较于 String

  • java list集合排序按某一属性排序操作

    我就废话不多说了,大家还是直接看代码吧~ public List<FreightM> sortList(List<FreightM> list){ Collections.sort(list, new Comparator<FreightM>(){ @Override public int compare(FreightM o1, FreightM o2) { if(o1.getType()==0){ return -1; }else{ return 1; } } })

  • 基于Java并发容器ConcurrentHashMap#put方法解析

    jdk1.7.0_79 HashMap可以说是每个Java程序员用的最多的数据结构之一了,无处不见它的身影.关于HashMap,通常也能说出它不是线程安全的.这篇文章要提到的是在多线程并发环境下的HashMap--ConcurrentHashMap,显然它必然是线程安全的,同样我们不可避免的要讨论散列表,以及它是如何实现线程安全的,它的效率又是怎样的,因为对于映射容器还有一个Hashtable也是线程安全的但它似乎只出现在笔试.面试题里,在现实编码中它已经基本被遗弃. 关于HashMap的线程不

  • Java实现ArrayList排序的方法详解

    目录 简介 法1:JDK8的stream 法2:Comparator#compare() 法3:Comparable#compareTo() 简介 说明 本文用示例介绍Java的ArrayList排序的方法. List排序方法 主要有三种方法(按推荐度排序): JDK8的stream Comparator#compare() Comparable#compareTo() 法1:JDK8的stream 见:一文详解Java中Stream流的使用 法2:Comparator#compare() 需求

  • 使用maven运行Java Main的三种方法解析

    maven使用exec插件运行java main方法,以下是3种不同的操作方式. 一.从命令行运行 1.运行前先编译代码,exec:java不会自动编译代码,你需要手动执行mvn compile来完成编译. mvn compile 2.编译完成后,执行exec运行main方法. 不需要传递参数: mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" 需要传递参数: mvn exec:java -Dexec.main

  • Sortable.js拖拽排序使用方法解析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的. 官网: http://rubaxa.github.io/Sortable/ 拖拽的时候主要由这几个事件完成, ondragstart 事件:当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上     ondragenter 事件:当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上     ondragover 事件:拖拽元素在目

  • Java中synchronized正确使用方法解析

    生活中随处可见并行的例子,并行 顾名思义就是一起进行的意思,同样的程序在某些时候也需要并行来提高效率,在上一篇文章中我们了解了 Java 语言对缓存导致的可见性问题.编译优化导致的顺序性问题的解决方法,下面我们就来看看 Java 中解决因线程切换导致的原子性问题的解决方案 -- 锁 . 说到锁我们并不陌生,日常工作中也可能经常会用到,但是我们不能只停留在用的层面上,为什么要加锁,不加锁行不行,不行的话会导致哪些问题,这些都是在使用加锁语句时我们需要考虑的. 来看一个使用 32 位的 CPU 写

  • Java中的Object.getClass()方法解析

    目录 Java Object.getClass()方法 具体见下面的例子 Java Object.getClass()源码分析 1.栈 2.堆 3.老生代 Person类型元数据 反射机制 Java Object.getClass()方法 Object.getClass()方法,这个方法的返回值是Class类型,Class c = obj.getClass(); 通过对象c,我们可以获取该对象的所有成员方法,每个成员方法都是一个Method对象:我们也可以获取该对象的所有成员变量,每个成员变量都

随机推荐