`
静静的小谱
  • 浏览: 18947 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

java 对象数据之间的比较并排序

    博客分类:
  • java
阅读更多
package j1226.compare;

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

public class User {
	private Integer id;
	private String name;
	private Integer age;
	private String address;

	public User(Integer id, String name, Integer age, String address) {
		this.id = id;
		this.name = name; 
		this.age = age;
		this.address = address;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

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

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
/*= `toString` 方法

返回该对象的字符串表示. 通常, toString 方法会返回一个 "以文本方式表示" 此对象的字符串. 结果应是一个简明但易于读懂的信息表达式. 建议所有子类都重写此方法.*/
	@Override
	public String toString() {
		return "[User name=" + this.name + " age=" + this.age + " address="
				+ this.address + "]";
	}

	public static void main(String[] args) {
		List<User> users = new ArrayList<User>();
		users.add(new User(1, "Zhangsan", 20, "Wuchang"));
		users.add(new User(1, "Lisi", 24, "Wuchang"));
		users.add(new User(1, "Wangwu", null, "Hankou"));
		users.add(new User(1, "Lisi", null, "Wuchang"));
		users.add(new User(1, "Zhangsan", 22, "Qingshan"));
		users.add(new User(1, "Lisi", 22, "Qingshan"));
		for (User u : users) {
			System.out.println(u);
		}
		System.out.println();

		/* 使用户按照年龄从小到大排序, 如果年龄为空, 则视作最小值 */
/*= 比较器 `Comparator<T>`

用来比较某两个对象, 给出比较的结果.
比较器本身并不跟被比较的对象有任何联系.

内置方法

int compare(T a, T b);

用来比较两个参数, 用整数来表示比较的结果

如果返回

* 负数, 表示 a 应该排在 b 之前
* 零, 表示 a 与 b 排列的位置相同
* 正数, 表示 a 应该排在 b 之后

所以, 以整数比较为例, 如果希望一个整数序列按照从小到大的顺序排列, 那么对应的比较器的实现为

* 当 a 比 b 要小时, 返回负数
* 当 a 与 b 相等时, 返回零
* 当 a 比 b 要大时, 返回整数*/
		Comparator<User> ageAsc = new Comparator<User>() {
			@Override
			public int compare(User a, User b) {
				if (a.getAge() == null) {
					return -1;
				}
				if (b.getAge() == null) {
					return 1;
				}
				return a.getAge() - b.getAge();
			}
		};
		Collections.sort(users, ageAsc);
		for (User u : users) {
			System.out.println(u);
		}
		System.out.println();

		/* 使用户按照年龄从大到小排序, 如果年龄为空, 则视作最小值; 如果年龄相同, 按照名字从小到大排序 */

/*= 可比较的 `Comparable<T>`

实现的此接口的类本身是具备自然顺序的.

内置方法

int compareTo(T another);

用来将 this 与参数进行比较, 用整数来表示比较的结果

如果返回

* 负数, 表示 this 应该排在 another 之前
* 零, 表示 this 与 another 排列的位置相同
* 正数, 表示 this 应该排在 another 之后*/
		Comparator<User> ageDescNameAsc = new Comparator<User>() {
			@Override
			public int compare(User a, User b) {
				// 如果年龄相同, 按照名字从小到大排序
				if (a.getAge() == b.getAge()) {
					return a.getName().compareTo(b.getName());
				}

				if (a.getAge() == null) {
					return 1;
				}
				if (b.getAge() == null) {
					return -1;
				}
				return b.getAge() - a.getAge();
			}
		};
		Collections.sort(users, ageDescNameAsc);
		for (User u : users) {
			System.out.println(u);
		}
		System.out.println();
	}
}
分享到:
评论

相关推荐

    JAVA 对象数组按照多个属性进行排序

    总结一下,当需要对Java对象数组按多个属性排序时,我们可以: 1. 实现`Comparator`接口并自定义`compare()`方法。 2. 使用lambda表达式或方法引用来创建`Comparator`实例,使代码更加简洁。 3. 对于数组,使用`...

    Java 对象属性map排序示例

    本示例将详细介绍如何对Java对象属性Map进行排序。 首先,了解Map的基本类型。Java提供了HashMap、TreeMap等实现Map接口的类。HashMap是非排序的,而TreeMap是基于红黑树数据结构,会按照键的自然顺序或者自定义...

    java List中对象多属性排序及各属性排序设置

    这个功能的实现是通过泛型和自定义比较器(Comparator)来完成的,对于复杂的数据排序需求具有很高的灵活性。 首先,我们要理解Java List接口中的sort()方法,它是Java 8引入的,用于对整个List进行原地排序。默认...

    Java 对象排序详解.rar_java 对象排序_对象_排序

    在Java编程语言中,对象排序是一项关键操作,特别是在处理集合数据结构时。本文将深入探讨如何对ArrayList、HashSet、TreeSet以及数组中的对象进行排序。理解这些排序机制对于编写高效且可维护的代码至关重要。 ...

    java 按对象属性排序

    在Java编程中,按对象属性排序是一个常见的需求,特别是在数据处理和数据分析的场景下。这里我们探讨的主题是如何根据对象的属性进行排序,结合提供的`Simple.java`和`User.java`文件,我们可以假设这是一个关于...

    java对象排序

    Java对象排序基础 在Java中,我们可以对两种类型的元素进行排序:原始类型(如int、char)和对象。对于对象,排序主要涉及到`Comparable`接口和`Comparator`接口。 - **Comparable接口**:如果一个类的实例需要被...

    Java对象排序中文排序SortedSet排序使用和源码讲

    本主题将深入探讨如何使用SortedSet接口来实现Java对象的中文排序,并通过源码分析理解其工作原理。 首先,SortedSet是Java集合框架中的一个接口,它继承自Set接口并添加了排序的特性。SortedSet的主要实现类有...

    Java面向对象思想的排序方法

    在实际编程中,我们还可以考虑其他优化措施,比如引入比较器(Comparator)以实现自定义排序规则,或者利用Java的内置排序函数`Arrays.sort()`,它底层使用的是高效的TimSort算法,但在某些特定场景下可能需要自定义...

    Java读取文件并对其排序后重新写入文件

    在Java编程中,读取文件、对数据进行排序并重新写入文件是常见的操作,尤其在数据处理和分析场景中。下面将详细讲解这个过程,包括相关知识点和具体实现。 首先,我们需要导入Java的`java.io`包,该包包含了处理...

    面向对象java排序包

    【面向对象Java排序包】是基于Java编程语言设计的一个专门用于处理排序问题的软件组件。这个包充分体现了面向对象的设计原则,将数据结构、算法和业务逻辑封装在独立的对象中,提高了代码的可读性和可维护性。它不仅...

    java中对单层json进行key字母排序

    `fromObject()`是org.json库提供的方法,它能将Java对象转换为JSON表示。 5. 最后,返回排序后的JSONObject。 这个方法只适用于单层JSON对象,即JSON对象中不包含嵌套的JSON对象或数组。如果需要处理嵌套的JSON...

    最快的排序算法 java最快的排序-在Java中对列表进行排序的最快方法,排序算法数据结构

    排序算法在 Java 中的应用 Java 中的排序算法是指对列表中的元素进行排序的方法。...在 Java 中,对列表进行排序的最快方法是使用 Collections.sort() 方法,并使用自定义的比较器来实现灵活的排序规则。

    数据结构与Java面向对象程序设计课程之间的有效衔接.pdf

    然而,在教学实践中,存在学生难以直观感受到数据结构与Java面向对象程序设计课程之间联系的问题,以及JDK中数据结构与算法实现与数据结构课程内容不匹配的问题。 为了解决这些问题,文章提出了将数据结构知识点与...

    JAVA对象以及数据的工具类

    本篇文章将深入探讨Java中的对象、基础类型以及数据处理相关的工具类。 首先,让我们关注Java中的基础类型。Java有八种原始数据类型:byte、short、int、long、float、double、char和boolean。为了方便处理这些类型...

    java 对象 排序

    总的来说,Java对象排序是通过实现`Comparable`接口或使用`Comparator`来完成的。理解这两个接口的用法,并熟练掌握`Collections.sort()`和`Arrays.sort()`的使用,是成为熟练Java开发者的必备技能。在实际编程中,...

    java 中文姓氏 排序

    本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **Collator 类**:这是 Java 中用于文本排序和检索的标准类。`Collator` 类提供了与语言环境相关的字符串排序...

    java 字符串a-z排序

    在Java编程语言中,对字符串中的字符进行a到z排序是一项常见的操作,特别是在处理文本数据或需要对字母顺序排列的场景。本知识点将详细讲解如何实现这个功能。 首先,我们需要理解字符串在Java中的本质。在Java中,...

    java List 排序 Collections.sort

    然后,我们创建一个Person对象的List,并使用`Collections.sort()`进行排序: ```java List&lt;Person&gt; people = new ArrayList(); people.add(new Person("Alice", 30)); people.add(new Person("Bob", 25)); people....

    java使用stream对日期排序

    在Java编程中,Stream API是Java 8引入的一个强大特性,它允许我们以声明性方式处理数据集合。本文将深入探讨如何使用Stream API对日期进行排序。日期排序在数据分析、日志处理、报表生成等场景中非常常见。下面我们...

    文件按照window 的排序规则-Java实现

    在Java编程环境中,我们也可以模拟实现这种排序规则。Java提供了丰富的类库和方法来处理文件操作,包括对文件的排序。以下是关于如何在Java中实现Windows文件排序规则的详细解释: 1. **文件对象的创建**: 在Java...

Global site tag (gtag.js) - Google Analytics