List集合对象中按照不同属性大小排序的实例

实例如下:

package com.huad.luck;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test {
	public static void main(String[] args) {
		Person p = new Person();
		p.setName("tom");
		p.setAge(11);
		Person p1 = new Person();
		p1.setName("lilei");
		p1.setAge(19);
		Person p2 = new Person();
		p2.setName("json");
		p2.setAge(15);
		List<Person> list =new ArrayList<Person>();
		list.add(p);
		list.add(p1);
		list.add(p2);
		Collections.sort(list,new Comparator<Person>() {
			//这里可以再Person中实现 Comparator<T>接口,重写compare方法
			@Override
			public int compare(Person o1, Person o2) {
				//这里按照名字排序
				 return o1.getName().compareTo(o2.getName());
				 //这里按照age排序
				 //return (o1.getAge()+"").compareTo(o2.getAge()+"");
				 //。。。根据不同属性值排序
			}  

		});
		for (int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i).getName());
		}
	}
}
//Person类
package com.huad.luck;

public class Person{
	private String name ;
	private int age;

	public Person(String name , int age) {
		this.name = name;
		this.age = age;
	}
	public Person( ) {
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

}
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 8px; margin-bottom: 8px; line-height: 22.5px; letter-spacing: 0.5px; font-size: 12.5px; word-wrap: break-word; word-break: break-all; color: rgb(51, 51, 51); font-family: 'Microsoft YaHei', Verdana, sans-serif, 宋体;"><span style="padding: 0px; margin: 0px; letter-spacing: normal; font-stretch: normal; font-size: 14px; line-height: 24px; font-family: Tahoma; color: rgb(0, 0, 0);">用collection.sort()方法对list集合排序</span><br style="padding: 0px; margin: 0px;" /></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 0px; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;"><span style="padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"><span style="padding: 0px; margin: 0px; list-style: none outside none; line-height: 21px; word-wrap: break-word; word-break: normal;"></span></span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 1em; margin-bottom: 0.5em; line-height: 24px; font-size: 14px; word-wrap: break-word; word-break: break-all; font-stretch: normal; font-family: Tahoma;">第一种是list中的对象实现Comparable接口,如下:<span style="padding: 0px; margin: 0px; list-style: none outside none; word-wrap: break-word; word-break: normal;"> </span></p><pre class="java" style="padding: 5px; margin-top: 0px; margin-bottom: 0px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border: 1px solid rgb(221, 221, 221); color: rgb(51, 51, 51); background: rgb(246, 246, 246);">/**
* 根据order对User排序
*/
public class User implements Comparable<User>{
  private String name;
  private Integer order;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Integer getOrder() {
    return order;
  }
  public void setOrder(Integer order) {
    this.order = order;
  }
  public int compareTo(User arg0) {
    return this.getOrder().compareTo(arg0.getOrder());
  }
}

测试一下:

public class Test{
  public static void main(String[] args) {
    User user1 = new User();
    user1.setName("a");
    user1.setOrder(1);
    User user2 = new User();
    user2.setName("b");
    user2.setOrder(2);
    List<User> list = new ArrayList<User>();
    //此处add user2再add user1
    list.add(user2);
    list.add(user1);
    Collections.sort(list);
    for(User u : list){
      System.out.println(u.getName());
    }
  }
}

输出结果如下

a
b

第二种方法是根据Collections.sort重载方法来实现,例如:

/**
* 根据order对User排序
*/
public class User { //此处无需实现Comparable接口
  private String name;
  private Integer order;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public Integer getOrder() {
    return order;
  }
  public void setOrder(Integer order) {
    this.order = order;
  }
}

主类中这样写即可:

public class Test{
  public static void main(String[] args) {
    User user1 = new User();
    user1.setName("a");
    user1.setOrder(1);
    User user2 = new User();
    user2.setName("b");
    user2.setOrder(2);
    List<User> list = new ArrayList<User>();
    list.add(user2);
    list.add(user1); 

    Collections.sort(list,new Comparator<User>(){
      public int compare(User arg0, User arg1) {
        return arg0.getOrder().compareTo(arg1.getOrder());
      }
    });
    for(User u : list){
      System.out.println(u.getName());
    }
  }
}

输出结果如下

a
b

前者代码结构简单,但是只能根据固定的属性排序,后者灵活,可以临时指定排序项,但是代码不够简洁

多字段的场合:

Collections.sort(list,new Comparator<User>(){ 

public int compare(User arg0, User arg1) { 

// 第一次比较专业 

int i = arg0.getOrder().compareTo(arg1.getOrder());

// 如果专业相同则进行第二次比较 

if(i==0){ 

// 第二次比较 

int j=arg0.getXXX().compareTo(arg1.getXXX()); 

// 如果学制相同则返回按年龄排序 

if(j==0){ 

return arg0.getCCC().compareTo(arg1.getCCC()); 

} 

return j; 

} 

return i; 

} 

});

以下是另外一个例子

package test;

import java.util.ArrayList; 

import java.util.Collections; 

import java.util.Comparator;

public class ArrayListTest { 

public static void main(String[] args) { 

ArrayList<Exmployee> arrayList = new ArrayList<Exmployee>() ; 

arrayList.add(new Exmployee("zengqiang",new Integer(5000))) ; 

arrayList.add(new Exmployee("zengmin",new Integer(4000))) ; 

arrayList.add(new Exmployee("liuxiaojuan",new Integer(4200))) ; 

arrayList.add(new Exmployee("giuming",new Integer(2200))) ; 

Collections.sort(arrayList, new Comparator<Exmployee>(){ 

public int compare(Exmployee arg0, Exmployee arg1) { 

return arg1.getSalary()-arg0.getSalary() ; //按照工资升序 

//return arg0.getSalary()-arg1.getSalary() ; 按照工资降序 

//return arg0.getName().compareTo(arg1.getName()) ; 按照姓名升序 

} 

}); 

for(Exmployee e:arrayList) 

System.out.println(e.getName()+"'s salary is "+e.getSalary()) ; 

}

}

class Exmployee { 

public Exmployee(String name, int salary) { 

this.name = name ; 

this.salary = salary ; 

}

private String name;

public String getName() { 

return name; 

}

public void setName(String name) { 

this.name = name; 

}

public int getSalary() { 

return salary; 

}

public void setSalary(int salary) { 

this.salary = salary; 

}

private int salary; 

}

以上这篇List集合对象中按照不同属性大小排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java list去重操作实现方式

    Java中的List是可以包含重复元素的(hash code 和equals),那么对List进行去重操作有两种方式实现: 方案一:可以通过HashSet来实现,代码如下: 复制代码 代码如下: class Student { private String id; private String name; public Student(String id, String name) { super(); this.id = id; this.name = name; } @Override pu

  • java中List对象排序通用方法

    本文实例讲述了java中List对象排序通用方法.分享给大家供大家参考.具体分析如下: 在数据库中查出来的列表list中,往往需要对不同的字段重新排序,一般的做法都是使用排序的字段,重新到数据库中查询.如果不到数据库查询,直接在第一次查出来的list中排序,无疑会提高系统的性能. 只要把第一次查出来的结果存放在session中,就可以对list重新排序了.一般对list排序可以使用Collections.sort(list),但如果list中包含是一个对象的话,这种方法还是行不通的.那要怎么排序

  • List对象去重和按照某个字段排序的实现方法

    1.List<Object>去重 People类 public class People { private int id; private String name; private Date createDate; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(S

  • List集合对象中按照不同属性大小排序的实例

    实例如下: package com.huad.luck; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Test { public static void main(String[] args) { Person p = new Person(); p.setName("tom"); p.

  • Java中List集合对象去重及按属性去重的8种方法

    最近在写一些关于java基础的文章,但是我又不想按照教科书的方式去写知识点的文章,因为意义不大.基础知识太多了,如何将这些知识归纳总结,总结出优缺点或者是使用场景才是对知识的升华.所以我更想把java相关的基础知识进行穿针引线,进行整体上的总结. 总结java中创建并写文件的5种方式 总结java从文件中读取数据的6种方法 总结java创建文件夹的4种方法及其优缺点 总结java中删除文件或文件夹的7种方法 总结java中文件拷贝剪切的5种方式 比如之前我已经写了上面的这些内容,如果对java基

  • C#实现获取不同对象中名称相同属性的方法

    本文实例讲述了C#实现获取不同对象中名称相同属性的方法.分享给大家供大家参考.具体如下: [两个类] class demo1 { public string Name { get; set; } public int Age { get; set; } } class demo2 { public string Name { get; set; } public string Address { get; set; } } [初始化数据] List<object> list = new Lis

  • Python3将ipa包中的文件按大小排序

    给你个ipa包,解压前输出包大小,解压后把里面的文件按大小排序. 代码如下: import os import shutil import zipfile _ipa_zip_path = lambda ipa_path: ipa_path.replace('.ipa', '.zip') _file_size = lambda file_path: os.path.getsize(file_path) / 1024 / 1024 def unzip(zip_path: str) -> str: d

  • Golang中Map按照Value大小排序的方法实例

    目录 起因 探索 实现 第一步 第二步 第三步 总结 总结 Golang中的 map 默认是 无序的 . 起因 最近项目中有这样一个需求: 根据用户当前的坐标点,获取该用户附近的预设城市名称. 这里有一个注意点是,假设这些支持的城市名称是预设的,所以就不能直接通过地图类api根据坐标点获取所在城市名称了. 想到的解决思路是: 获取这几个预设城市的坐标点 App端获取用户当前坐标点 分别计算得到该用户坐标点距离各个预设城市的坐标点距离 然后计算得到其中距离最小的一项 这个坐标点对应的城市就是所求

  • java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提出而得名. 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差

  • 如何直接访问php实例对象中的private属性详解

    前言 本文主要介绍了关于如何直接访问php实例对象中private属性的相关内容,在介绍关键部分之前,我们先回顾一下php面向对象的访问控制. 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的.被定义为公有的类成员可以在任何地方被访问.被定义为受保护的类成员则可以被其自身以及其子类和父类访问.被定义为私有的类成员则只能被其定义所在的类访问. 类属性必须定义为公有,受保护,私有之一.如果用 var 定义,则被视为公

  • JS删除对象中某一属性案例详解

    代码如下 var obj={ name: 'zhagnsan', age: 19 } delete obj.name //true typeof obj.name //undefined 通过delete操作符, 可以实现对对象属性的删除操作, 返回值是布尔 可以删除其他东西吗 1.变量 var name ='zs' //已声明的变量 delete name //false console.log(typeof name) //String age = 19 //未声明的变量 delete ag

  • Asp.net内置对象之Cookies(简介/属性方法/基本操作及实例)

    一.了解Cookies对象 Cookies是由Web服务器管理的存放在客户计算机中的一个数据集合.这些数据是客户端.服务器端相关的.也就是说客户浏览器每登录一个网站,在Cookies中就会保存客户浏览器与该网站的相关信息.即使客户用同一个浏览器登陆了多个网站,在Cookies中依然会保存浏览器与多个网站的相关信息,但Cookies中这些信息的管理是有序的,当客户浏览器再次登录某网站时,只有Cookies中相对应的信息会发生作用. Cookies是Web应用程序设计的一项很重要的技术,当Web服务

  • Android中Property Animation属性动画编写的实例教程

    1.概述 Android提供了几种动画类型:View Animation .Drawable Animation .Property Animation .View Animation相当简单,不过只能支持简单的缩放.平移.旋转.透明度基本的动画,且有一定的局限性.比如:你希望View有一个颜色的切换动画:你希望可以使用3D旋转动画:你希望当动画停止时,View的位置就是当前的位置:这些View Animation都无法做到.这就是Property Animation产生的原因,本篇则来详细介绍

随机推荐