Comparator有两种实现方式:

1,匿名内部类

2,创建一个类用于实现Comparator,该类创建的对象就是比较器

Person类

public class Person implements Comparable<Person> {
private String name;
private String sex;
private int age;
private Book books;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Book getBooks() {
return books;
}
public void setBooks(Book books) {
this.books = books;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age +
", books.name=" + books.getBookName() + ", books.price=" + books.getPrice() + "]";
}
public Person(String name, String sex, int age, Book books) {
super();
this.name = name;
this.sex = sex;
this.age = age;
this.books = books;
}
public Person() {
super();
} }

Book类

package Homework3;

public class Book {
//Book类中 有 书名,书的价格
private String bookName;
private int price;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookName=" + bookName + ", price=" + price + "]";
}
public Book(String bookName, int price) {
super();
this.bookName = bookName;
this.price = price;
}
public Book() {
super();
} }

Comparator实现–匿名内部类

public class Test {
public static void main(String[] args){
//Comparator
TreeSet<Person> set2=new TreeSet<>(new Comparator<Person>() { @Override
public int compare(Person o1, Person o2) {
if(o1.getAge()>o2.getAge()){
return -1;
}else if (o1.getAge()<o2.getAge()) {
return 1;
}else {
CollationKey key=Collator.getInstance().getCollationKey(o1.getName());
CollationKey key2=Collator.getInstance().getCollationKey(o2.getName());
int n=key.compareTo(key2);
if(n>0){
return 1;
}else if (n<0) {
return -1;
}else {
int a=o1.getBooks().getPrice()-o2.getBooks().getPrice();
if(a>0){
return -1;
}else if (a<0) {
return 1;
}else {
CollationKey key3=Collator.getInstance().getCollationKey(o1.getBooks().getBookName());
CollationKey key4=Collator.getInstance().getCollationKey(o2.getBooks().getBookName());
int m=key3.compareTo(key4);
if(m>0){
return 1;
}else if (m<0) {
return -1;
}else {
return 0;
}
} }
}
}
});
// 第一条件: 年龄 降序
set2.add(new Person("Jane1", "female", 20, new Book("z指环王", 30)));
set2.add(new Person("Jane2", "female", 30, new Book("z指环王", 30)));
// 第二条件: 姓名升序
set2.add(new Person("Ada3", "female", 30, new Book("z指环王", 30)));
// 第三条件: 书的价格 降序
set2.add(new Person("Ada4", "female", 30, new Book("z指环王", 50)));
// 第四条件: 书名 升序
set2.add(new Person("Ada5", "female", 30, new Book("m指环王", 50)));
System.out.println(set2);
}
}

TreeSet集合排序方式二:定制排序Comparator的更多相关文章

  1. Hadoop案例(八)辅助排序和二次排序案例(GroupingComparator)

    辅助排序和二次排序案例(GroupingComparator) 1.需求 有如下订单数据 订单id 商品id 成交金额 0000001 Pdt_01 222.8 0000001 Pdt_05 25.8 ...

  2. TreeSet的两种排序方式,含Comparable、Comparator

    1.排序的引入 由于TreeSet可以实现对元素按照某种规则进行排序,例如下面的例子 public class TreeSetDemo { public static void main(String ...

  3. Linq排序方式与Lambda排序方式比较以及OrderBy、ThenBy的使用

    沿用之前某一篇文章的实体类与EF操作类代码.数据库中增加几条数据 Linq 的排序方式,下面例子是根据RoleId 升序,Name降序 EFContext<Member> efMember ...

  4. MapReduce之GroupingComparator分组(辅助排序、二次排序)

    指对Reduce阶段的数据根据某一个或几个字段进行分组. 案例 需求 有如下订单数据 现在需要找出每一个订单中最贵的商品,如图 需求分析 利用"订单id和成交金额"作为key,可以 ...

  5. python 实现排序算法(二)-合并排序(递归法)

    #!/usr/bin/env python2 # -*- coding: utf-8 -*- """ Created on Tue Nov 21 22:28:09 201 ...

  6. TreeSet之定制排序和自然排序

    TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字 ...

  7. java TreeSet的排序之定制排序

    TreeSet的自然排序是根据元素的大小进行升序排序的,若想自己定制排序,比如降序排序,就可以使用Comparator接口了: 该接口包含int compare(Object o1,Object o2 ...

  8. List的定制排序 包括使用lambda表达式来实现的方法

    1.先实现Comparator的接口 重写compare方法 根据比较大小来返回数值: 比如:(Integer o1  -   Integer o2); return 1 表示o1>o2; re ...

  9. 详细讲解MapReduce二次排序过程

    我在15年处理大数据的时候还都是使用MapReduce, 随着时间的推移, 计算工具的发展, 内存越来越便宜, 计算方式也有了极大的改变. 到现在再做大数据开发的好多同学都是直接使用spark, hi ...

随机推荐

  1. 第一章 自定义MVC框架

    第一章  自定义MVC框架1.1 MVC模式设计    组成:Model:模型,用于数据和业务的处理          View :视图,用于数据的显示          Controller:控制器 ...

  2. C++queue容器学习(详解)

    一.queue模版类的定义在<queue>头文件中. queue与stack模版非常类似,queue模版也需要定义两个模版参数,一个是元素类型,一个是容器类型,元素类型是必要的,容器类型是 ...

  3. mybatisPeizhixml文件的层次结构

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC & ...

  4. JS面向对象,创建,继承

    很开心,最近收获了很多知识,而且发现很多东西,以前理解的都是错的,或者是肤浅的,还以为自己真的就get到了精髓,也很抱歉会影响一些人往错误的道路上走,不过这也告诉了我们,看任何一篇文章都不能盲目的去相 ...

  5. FME中通过HTMLExtractor向HTML要数据

    如何不断扩充数据中心的数据规模,提升数据挖掘的价值,这是我们思考的问题,数据一方面来自于内部生产,一部分数据可以来自于互联网,互联网上的数据体量庞大,形态多样,之前blog里很多FMEer已经提出了方 ...

  6. Java常见快捷键

    1.Alt+/ 补充代码 2.shift+d 删除选中代码同时删除空格 3.shift+alt+R 改变所有与选中部分相同的字符串 4.ctrl+S 保存代码 5.ctrl+shift+F 格式化代码 ...

  7. poj1151 Atlanis 线段树+离散化求矩形面积的并

    题目链接:http://poj.org/problem?id=1151 很经典的题目,网上有很多模板代码,自己理解了一天,然后很容易就敲出来了... 代码: #include<iostream& ...

  8. 使用Maven管理Oracle驱动包

    由于Oracle授权问题,Maven3不提供Oracle JDBC driver,为了在Maven项目中应用Oracle JDBC driver,必须手动添加到本地仓库. 手动添加到本地仓库需要本地有 ...

  9. struts2总体介绍

    这篇博客开始将总结一下有关框架的知识,在开发中合适的利用框架会使我们的开发效率大大提高.当今比较流行的开源框架: 关注数据流程的MVC框架 (Struts1/2, WebWork, Spring MV ...

  10. 如何设置SecureCRT快捷键

    第一步,打开Tools -> Keymap Editor: 2.用鼠标点击要设置的快捷键,这里以F3为例,然后选择Map Select Key 3.弹出的对话框中,Function一栏选择Run ...