在某些特殊情况,我们需要对一个对象数组或集合依照对应的属性排序;此时,我们就可以用Comparator接口处理。

上代码

TestComparaTo 类
 package com.test.interfacetest;

 public class TestComparaTo implements Comparable<TestComparaTo>{
private int id;
private String name; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public int compareTo(TestComparaTo o) {
return Integer.compare(id, o.getId());
} }

MainClass类

 import java.util.Arrays;
import java.util.Collections;
import java.util.List; import com.test.interfacetest.TestComparaTo; public class MainClass { public static void main(String[] args) {
TestComparaTo testComparaTo = new TestComparaTo();
testComparaTo.setId(21);
testComparaTo.setName("钻石王老五"); TestComparaTo testComparaTo1 = new TestComparaTo();
testComparaTo1.setId(15);
testComparaTo1.setName("岛市老八"); TestComparaTo testComparaTo2 = new TestComparaTo();
testComparaTo2.setId(19);
testComparaTo2.setName("芜湖大司马"); TestComparaTo[] s = {testComparaTo,testComparaTo1,testComparaTo2};
List<TestComparaTo> asList = Arrays.asList(s); System.out.println("排序前集合内容:");
for(TestComparaTo obj : asList) {
System.out.println(obj.getName()+"id为:"+obj.getId());
} System.out.println("排序前数组内容:");
for(TestComparaTo obj : s) {
System.out.println(obj.getName()+"id为:"+obj.getId());
} Arrays.sort(s);
Collections.sort(asList); System.out.println("排序后集合内容:");
for(TestComparaTo obj : asList) {
System.out.println(obj.getName()+"id为:"+obj.getId());
}
System.out.println("排序后数组内容:");
for(TestComparaTo obj : s) {
System.out.println(obj.getName()+"id为:"+obj.getId());
} } }

总结就是:实现comparable接口的comparaTo方法,然后数组用Array的sort方法排序,集合用collection的sort方法排序。

在Java8后,可以运用lambda表达式使得Comparator使用起来更简单

例如下面四种方法

 //以下第一个参数a、b、c、d是TestComparaTo类的实例化对象的数组,对该数组排序

 //根据TestComparaTo类的name属性排序
Arrays.sort(a,Comparator.comparing(TestComparaTo::getName)); //如果name相同则根据id排序
Arrays.sort(b,Comparator.comparing(TestComparaTo::getName).thenComparing(TestComparaTo::getId)); //根据name长度排序
Arrays.sort(c,Comparator.comparing(TestComparaTo::getName,(a,t)->Integer.compare(a.length(), t.length()))); //根据name长度排序 显然这个比上一个更简单
Arrays.sort(d,Comparator.comparingInt(a -> a.getName().length()));

最新文章

  1. 前端构建大法 Gulp 系列 (四):gulp实战
  2. 相克军_Oracle体系_随堂笔记006-日志原理
  3. mysql中bit_count和bit_or函数的含义
  4. js 控制Div循环显示 非插件版
  5. printf背后的故事
  6. java webservice 总结(学会读别人的webservice并且通过代理模式访问)
  7. Android开发--EditText的应用
  8. Spring3 MVC入门示例
  9. JS 之BOM
  10. MATLAB学习笔记(十一)&mdash;&mdash;MATLAB图形用户界面设计
  11. Python单元测试——深入理解unittest (转)
  12. Jmeter实现WebSocket协议的接口和性能测试方法
  13. 封装的localstorge的插件,store.js
  14. NET Core 中的依赖注入
  15. NFS : device is busy
  16. feign多文件上传
  17. webstorm调试
  18. Java细节整理——数组与内存控制
  19. 【转】ionic2 返回按钮
  20. 大数据入门第十天——hadoop高可用HA

热门文章

  1. 用for循环创建对象
  2. 计算机二级-C语言-程序修改题-190113记录-对指定字符串的大小写变换处理。
  3. 计算机二级-C语言-程序填空题-190110记录-文件写入与文件读出显示
  4. 例题3_2 WERTYU(UVa10082)
  5. Linux :ls 命令
  6. cssdiv设置高宽百分比不起作用的问题
  7. netty同时实现http与socket
  8. PHPStorm 使用 Xdebug
  9. 基于springboot通过注解AOP动态切换druid多数据源--mybatis
  10. 疫情对国内5G发展的影响