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对象数组按多个属性排序时,我们可以: 1. 实现`Comparator`接口并自定义`compare()`方法。 2. 使用lambda表达式或方法引用来创建`Comparator`实例,使代码更加简洁。 3. 对于数组,使用`...
本示例将详细介绍如何对Java对象属性Map进行排序。 首先,了解Map的基本类型。Java提供了HashMap、TreeMap等实现Map接口的类。HashMap是非排序的,而TreeMap是基于红黑树数据结构,会按照键的自然顺序或者自定义...
这个功能的实现是通过泛型和自定义比较器(Comparator)来完成的,对于复杂的数据排序需求具有很高的灵活性。 首先,我们要理解Java List接口中的sort()方法,它是Java 8引入的,用于对整个List进行原地排序。默认...
在Java编程语言中,对象排序是一项关键操作,特别是在处理集合数据结构时。本文将深入探讨如何对ArrayList、HashSet、TreeSet以及数组中的对象进行排序。理解这些排序机制对于编写高效且可维护的代码至关重要。 ...
在Java编程中,按对象属性排序是一个常见的需求,特别是在数据处理和数据分析的场景下。这里我们探讨的主题是如何根据对象的属性进行排序,结合提供的`Simple.java`和`User.java`文件,我们可以假设这是一个关于...
Java对象排序基础 在Java中,我们可以对两种类型的元素进行排序:原始类型(如int、char)和对象。对于对象,排序主要涉及到`Comparable`接口和`Comparator`接口。 - **Comparable接口**:如果一个类的实例需要被...
本主题将深入探讨如何使用SortedSet接口来实现Java对象的中文排序,并通过源码分析理解其工作原理。 首先,SortedSet是Java集合框架中的一个接口,它继承自Set接口并添加了排序的特性。SortedSet的主要实现类有...
在实际编程中,我们还可以考虑其他优化措施,比如引入比较器(Comparator)以实现自定义排序规则,或者利用Java的内置排序函数`Arrays.sort()`,它底层使用的是高效的TimSort算法,但在某些特定场景下可能需要自定义...
在Java编程中,读取文件、对数据进行排序并重新写入文件是常见的操作,尤其在数据处理和分析场景中。下面将详细讲解这个过程,包括相关知识点和具体实现。 首先,我们需要导入Java的`java.io`包,该包包含了处理...
【面向对象Java排序包】是基于Java编程语言设计的一个专门用于处理排序问题的软件组件。这个包充分体现了面向对象的设计原则,将数据结构、算法和业务逻辑封装在独立的对象中,提高了代码的可读性和可维护性。它不仅...
`fromObject()`是org.json库提供的方法,它能将Java对象转换为JSON表示。 5. 最后,返回排序后的JSONObject。 这个方法只适用于单层JSON对象,即JSON对象中不包含嵌套的JSON对象或数组。如果需要处理嵌套的JSON...
排序算法在 Java 中的应用 Java 中的排序算法是指对列表中的元素进行排序的方法。...在 Java 中,对列表进行排序的最快方法是使用 Collections.sort() 方法,并使用自定义的比较器来实现灵活的排序规则。
然而,在教学实践中,存在学生难以直观感受到数据结构与Java面向对象程序设计课程之间联系的问题,以及JDK中数据结构与算法实现与数据结构课程内容不匹配的问题。 为了解决这些问题,文章提出了将数据结构知识点与...
本篇文章将深入探讨Java中的对象、基础类型以及数据处理相关的工具类。 首先,让我们关注Java中的基础类型。Java有八种原始数据类型:byte、short、int、long、float、double、char和boolean。为了方便处理这些类型...
总的来说,Java对象排序是通过实现`Comparable`接口或使用`Comparator`来完成的。理解这两个接口的用法,并熟练掌握`Collections.sort()`和`Arrays.sort()`的使用,是成为熟练Java开发者的必备技能。在实际编程中,...
本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **Collator 类**:这是 Java 中用于文本排序和检索的标准类。`Collator` 类提供了与语言环境相关的字符串排序...
在Java编程语言中,对字符串中的字符进行a到z排序是一项常见的操作,特别是在处理文本数据或需要对字母顺序排列的场景。本知识点将详细讲解如何实现这个功能。 首先,我们需要理解字符串在Java中的本质。在Java中,...
然后,我们创建一个Person对象的List,并使用`Collections.sort()`进行排序: ```java List<Person> people = new ArrayList(); people.add(new Person("Alice", 30)); people.add(new Person("Bob", 25)); people....
在Java编程中,Stream API是Java 8引入的一个强大特性,它允许我们以声明性方式处理数据集合。本文将深入探讨如何使用Stream API对日期进行排序。日期排序在数据分析、日志处理、报表生成等场景中非常常见。下面我们...
在Java编程环境中,我们也可以模拟实现这种排序规则。Java提供了丰富的类库和方法来处理文件操作,包括对文件的排序。以下是关于如何在Java中实现Windows文件排序规则的详细解释: 1. **文件对象的创建**: 在Java...