`

Collection工具实现排序

    博客分类:
  • Java
 
阅读更多

----------------------------------------------------------------------------------------------------------------------------------

 

集合内排序:

 

比如 :对列表 List<AsnExpDateDto>  排序: 

AsnExpDateDto 类需要实现接口   Comparable

 

/**
 * @author wuao 签注有效期查询Dto 2011-08-30
 * 
 */
public class AsnExpDateDto implements Comparable<AsnExpDateDto> {

	// PILOT_BASIC_INFO
	private Integer basicInfoId;// 飞行员基础表主键
	private String  clerkCode; //工号
	private String pilotName;// 飞行员姓名


	@Override
	public int compareTo(AsnExpDateDto o) {
		// TODO 根据本次复训日期进行顺序排序
		
		int monthInt = this.getLicenceEndDate().compareTo(o.getLicenceEndDate());
		if(monthInt == 0){
			return this.getBenchMonth() - o.getBenchMonth();
		}
		return monthInt;
	}

}

 

 

 
  Collections.sort(rstAsnExpDateList);

 

 就可以排序 。

 

 注意的是:  集合内用于排序的接口计算的值不要出现 NULL 的 , 否则,会影响排序结果。

 

目前 ,我把用于排序的字段的值为空的元素过滤出来, 单独插入到集合的最前 。 

 

 

for(PeopleDto peopleDto : peopleRstList){

		if(asnExpDateDto.getLicenceEndDate() != null){
			rstAsnExpDateList.add(asnExpDateDto);
		}else{
			rstAsnExpDateEmpList.add(asnExpDateDto);
		}

}

  Collections.sort(rstAsnExpDateList);
  rstAsnExpDateList.addAll(0, rstAsnExpDateEmpList);

 

 

 

 

 

 

实现排序接口:

 

public final class ModelableComparator implements Comparator<Modelable> {

	private final List<Long> ids;

	public ModelableComparator(List<Long> ids) {
		this.ids = ids;
	}

	protected int getIndex(Long id) {
		return ids.indexOf(id);
	}

	@Override
	public int compare(Modelable o1, Modelable o2) {
		return (getIndex(o1.getId()) - getIndex(o2.getId()));
	}

}

 

 

Modelable 接口 : 

 

 

public interface Modelable {
    public Long getId();
    public void setId(Long id);
}

 

 

 排序的时候,  List 中的类型要有这个 getId() 方法 。

 


  public class ActivityVO  implements Serializable,Modelable{
    private Long id; // 标识ID   ...........

  }

 

 

List<ActivityVO> activityVOs;

 

 

List<Long> ids=cmsItemService.recommendItemFidListByCod(cmsKey,count);


 //按照 ids 的顺序排序
Collections.sort(activityVOs, new ModelableComparator(ids));

 

 

 

对 List 进行多种方式的排序

 

		for(StudentDto dto : context.getWarnStudentList()){
			SimCrewAssignCheck simCrewAssignCheck = new SimCrewAssignCheck();
			simCrewAssignCheck.setIndex(0L);
			simCrewAssignCheck.setUnitName(dto.getDto().getUnitName());
			simCrewAssignCheck.setClerkCode(dto.getDto().getClerkCode());
			simCrewAssignCheck.setName(dto.getDto().getPilotName());
			simCrewAssignCheck.setReason(dto.getErrMsg().toString());
			fixEditable(dto, simCrewAssignCheck);
			simCrewAssignCheck.setLastDate(dto.getDto().getValidBeginDate());
			simCrewAssignCheck.setStandardMonth(dto.getDto().getBenchMonth());
			simCrewAssignCheck.setBigErrTypeName(dto.errBigType.optname);
			simCrewAssignCheck.setStandard(dto.getDto().getTechnicalStandard());
			simCrewAssignCheckList.add(simCrewAssignCheck);
		}
		//初始化单位列表信息
		this.a = context.getA();
		
		//已经按照的顺序是   错误种类  排
		//把错误进行排序
		if(formCheck.getOrder_type() == 1){//按照 单位+姓名 排
			UnitNameComparator compare = new UnitNameComparator();
			Collections.sort(simCrewAssignCheckList, compare);
		}else if(formCheck.getOrder_type() == 3){//按照 小错误原因+单位+姓名 排
			TypeUnitNameComparator compare = new TypeUnitNameComparator();
			Collections.sort(simCrewAssignCheckList, compare);
		}

 

 

比较器的代码:

 

	/**
	 * 单位 + 姓名 的排序比较器
	 * @author wuao
	 *
	 */
	private class UnitNameComparator implements Comparator {

		@Override
		public int compare(Object o1, Object o2) {
			// TODO Auto-generated method stub
			SimCrewAssignCheck s1 = (SimCrewAssignCheck) o1;
			SimCrewAssignCheck s2 = (SimCrewAssignCheck) o2;
			if(s1.getUnitName().equals(s2.getUnitName())){
				return s1.getName().compareTo(s2.getName());
			}else{
				return s1.getUnitName().compareTo(s2.getUnitName());
			}
			//return 0;
		}
		
	}
	
	/**
	 * 小错误原因+单位+姓名 的排序比较器
	 * @author wuao
	 *
	 */
	private class TypeUnitNameComparator implements Comparator {
		
		@Override
		public int compare(Object o1, Object o2) {
			// TODO Auto-generated method stub
			SimCrewAssignCheck s1 = (SimCrewAssignCheck) o1;
			SimCrewAssignCheck s2 = (SimCrewAssignCheck) o2;
			if(!s1.getReason().equals(s2.getReason())){
				return s1.getReason().compareTo(s2.getReason());
			}else{
				if(s1.getUnitName().equals(s2.getUnitName())){
					return s1.getName().compareTo(s2.getName());
				}else{
					return s1.getUnitName().compareTo(s2.getUnitName());
				}
			}
			//return 0;
		}
		
	}

 

 

 

 

更多Java对象比较器应用,见 :

 

http://blog.163.com/jean757282710@126/blog/static/114224249201052641741154/

 

 

 

分享到:
评论

相关推荐

    google的collection包

    谷歌的Collection包是Java开发中一个非常重要的工具集,它扩展了Java标准库中的集合框架,为开发者提供了更强大、更高效的数据结构和算法。在谷歌Collection包中,特别是其Guava子库,包含了丰富的数据结构,如...

    Java集合类(Collection)学习

    在Java编程语言中,集合框架是处理对象组的重要工具,其中`Collection`是最基础的接口,它是所有集合类的根接口。在这个Java集合类的学习资料中,我们将深入探讨`Collection`以及与其相关的`TreeMap`、`Set`和`List`...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    本次我们关注的是Java集合框架中的三类接口:List、Set和Map,以及如何实现它们的特定功能,特别是关于`TreeSet`和`TreeMap`的按值排序。标题中提到的“JCF(List、Set、Map)学习,实现了,value&gt;按value排序”是一个...

    java集合框架之Collection实例解析

    同时,`Collections`工具类提供了许多静态方法,可以对集合进行操作,如反转、填充、排序等。 此外,`List`接口中的`add(E e)`、`remove(Object o)`、`get(int index)`等方法以及`Set`接口中的`add(E e)`、`remove...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    本文将深入探讨集合框架的各个组成部分,包括Collection、List、Set和Map,以及它们的实现原理和排序方法。 1. **集合框架概述** 集合框架是一个统一的接口层次结构,用于存储和操作对象的容器。Java集合框架的...

    Java集合排序及java集合类详解(Collection、List、Map、Set)讲解.pdf

    本文将深入探讨Java集合框架,包括Collection、List、Set和Map四大接口,以及它们的实现原理和排序方法。 **1. 集合框架概述** 集合框架是一组接口和类,用于存储、管理和操作对象的容器。这些接口和类为开发者...

    Collection List Set Map 区别记忆

    了解这些接口之间的差异对于编写高效的Java代码至关重要,同时也为深入学习Java集合框架的源码和工具使用奠定了基础。通过阅读和实践,开发者可以更好地理解和利用这些接口,提高代码的可读性和效率。

    Laravel开发-laravel-collection

    在Laravel框架中,`Laravel Collection`是一个强大的工具,它是对PHP的数组操作的扩展,提供了丰富的实用方法,使得处理数据变得更加优雅和简洁。这个压缩包文件"laravel-collection-master"很可能包含了Laravel ...

    php中的Collection集合类

    总的来说,PHP中的`Collection`集合类是组织和操作数据的有效工具,它不仅提供了统一的数据接口,还能通过扩展实现更高级的功能,从而提高代码的灵活性和复用性。合理地利用`Collection`,可以使代码更加模块化,...

    集合 Collection

    - `TreeSet`:基于红黑树实现的排序集合。 - `LinkedHashSet`:结合了`HashSet`和`LinkedList`的特性,保持插入顺序。 - **Map**:存储键值对的集合。 - `HashMap`:基于哈希表实现的映射。 - `TreeMap`:基于...

    java中Collection深入剖析

    本篇文章将深入剖析Java中的`Collection`框架,探讨其核心概念、主要接口及其实现类,以及在实际开发中如何有效地使用这些工具。 首先,我们来看`Collection`接口。它定义了集合的基本操作,如添加元素(`add()`)...

    Java集合Collection、List、Set、Map使用详解

    它提供了处理数据集合的强大工具,这些工具不仅支持基本操作(如添加、删除和查找),还支持更高级的功能,如排序、过滤等。 ##### 1.1.1 容器简介 在Java中,容器是用来存储对象的一种数据结构。容器可以分为两大...

    JDK8排序总结

    7. **默认方法**:`Collection`和`List`接口新增了默认方法,如`sort()`,使得无需实现类就可以直接调用排序功能。 在`TestSort.java`这个文件中,你可能会看到以上各种排序技术的实际应用。通过学习和实践这个示例...

    关于Java_Collection_API_

    - **基于排序二叉树的实现**:`TreeMap`和`TreeSet`采用红黑树数据结构实现,这要求集合中的元素必须具备可比较性(即实现`Comparable`接口)。红黑树保证了树的高度较低,从而提供了稳定的查找效率。 #### 三、...

    java Collection&Map

    在这个框架中,Collection和Map接口及其实现类扮演着核心角色。 1. **Collection接口**: - Collection是所有单值容器的基接口,包括Set和List接口。 - **Set接口**:不允许重复元素,主要实现有HashSet、TreeSet...

    Collection Framework 学习笔记.pdf

    - **Collections 类**:提供了一系列静态方法用于操作 Collection 对象,包括排序、反转、填充等。 - **Arrays 类**:如前所述,提供了多种数组操作方法,例如排序、填充等。 #### 四、继承关系及具体实现 - **...

    JAVA_Collection框架

    ### JAVA Collection框架详解 #### 一、概述 Java Collection框架 是 Java 核心库中...通过上述分析,我们可以看出 Java Collection 框架为我们提供了丰富的工具来处理不同类型的数据结构需求,大大提高了开发效率。

    Java之Collection总结

    ### Java之Collection总结 #### 一、集合简介与遍历方式 ##### 1.... 集合是一种特殊的数据结构,主要用于存储和管理对象。...此外,`Collections`工具类和排序比较接口的合理运用能够进一步增强程序的功能性和灵活性。

    java 使用Collections类对List的排序操作

    总的来说,`Collections` 类提供的排序功能使得在 Java 中对 `List` 进行操作变得更加便捷,无论是自然排序还是定制排序,都可以轻松实现。同时,随着 Java 8 及更高版本的引入,流API也提供了新的排序方式,开发者...

    Java集合排序及java集合类详解.pdf

    内容存在一些文字错误和漏识别,但可以推断该文档详细讲解了Java集合类的各个接口以及实现类的特点、用法以及它们之间的区别,并且详细介绍了集合的排序机制,如何利用Comparable和Comparator接口实现排序,以及集合...

Global site tag (gtag.js) - Google Analytics