1、list集合中的对象实现Comparable接口

public class User implements Comparable<User>{

private Integer id;

/**
  * 用户名
  */

private String userName;

/**
  * 年龄
  */

private Integer age;

@Override

public int compareTo(User o) {
     // TODO Auto-generated method stub
     return this.age-o.age;

}

}

测试类实现list按照实体类的age字段排序

public static void main(String[] args) {
         List<User> list = Lists.newArrayList();
         User user1 = new User(23);
         User user2 = new User(2);
         User user3 = new User(43);
         list.add(user1);
         list.add(user2);
         list.add(user3);
         Collections.sort(list);
         for (User user : list) {
             System.out.println(user.getAge());
         }

}

打印结果为

2

23

43

还可以根据lsit集合中的对象的某个字段获取最大值和最小值,通过Collections.min()和Collections.max()方法

public static void main(String[] args) {
         List<User> list = Lists.newArrayList();
         User user1 = new User(23);
         User user2 = new User(2);
         User user3 = new User(43);
         list.add(user1);
         list.add(user2);
         list.add(user3);
         for (User user : list) {
             System.out.println(Collections.min(list).getAge())
         }

}

打印结果为

2

2、通过匿名内部类来进行比较排序

public static void main(String[] args) {


         List<Member> mList = Lists.newArrayList();
         Member member1 = new Member("李鸿章",4);
         Member member2 = new Member("张志红",2);
         Member member3 = new Member("张会生",3);
         mList.add(member1);
         mList.add(member3);
         mList.add(member2);
         //1、用Comparator匿名内部类来进行排序
         Collections.sort(mList, new Comparator<Member>() {
             @Override
             public int compare(Member o1, Member o2) {
                 return o1.getAge()-o2.getAge();
             }
            
         });
         for (Member member : mList) {
             System.out.println(member.getAge()+"---"+member.getNickname());
         }

}

此处为但条件排序,根据年龄进行排序,结果为

2---张志红

3---张会生

4---李鸿章

也可以按照多条件来排序,先按名称首字母排序,相同再按年龄排序

public static void main(String[] args) {
      List<Member> mList = Lists.newArrayList();
         Member member1 = new Member("李鸿章",4);
         Member member2 = new Member("张志红",2);
         Member member3 = new Member("张会生",3);
         mList.add(member1);
         mList.add(member3);
         mList.add(member2);
         //多条件排序
         Collections.sort(mList, new Comparator<Member>() {
             @Override
             public int compare(Member o1, Member o2) {
                 int rs=0;
                 int a = o1.getNickname().compareTo(o2.getNickname());
                 if(a!=0) {
                     rs= a>0?-1:2;
                 }else {
                     a=o1.getAge().compareTo(o2.getAge());
                     rs= a>0?1:-1;
                 }
                 return rs;
             }
            
         });
         for (Member member : mList) {
             System.out.println(member.getAge()+"---"+member.getNickname());
         }
     }

打印结果为

4---李鸿章

2---张志红

3---张会生

3、jdk1.8开始引入了lambda表达式,可以用来替换匿名内部类

Lambda表达式的语法
基本语法:
(parameters) -> expression

(parameters) ->{ statements; }

下面是Java lambda表达式的简单例子:

// 1. 不需要参数,返回值为 5
() -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x // 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y // 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)

所以上面通过匿名内部类对List排序的方法就可以改写成下面的

Collections.sort(mList,(Member m1, Member m2) ->m1.getAge().compareTo(m2.getAge()));

List集合排序的方法的更多相关文章

  1. Collections -集合排序compareTo方法重写,shuffle,addall

    package cn.learn.collection.Collections; /* 排序的对象的类,实现comparable借口,重写compareto方法 若要打印必须重写toString方法, ...

  2. 关于自定义 List集合排序的方法!

    大致流程: 排序是用到排序的接口Comparator<T>你要先建一个类实现比较器Comparator //大致流程public class StuComp implements Comp ...

  3. JS 对Array集合排序的方法

    我的业务是根据距离的远近经行一个排序: 第一种方法:冒泡排序 排序前的数据是这样子的: 排序后是这样子的: 代码可以直接复制使用的: <!doctype html> <html> ...

  4. Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序

    package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...

  5. 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序

    在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...

  6. 【Java进阶】---map集合排序

    map集合排序         这篇文章讲的不仅仅是map排序,比如把对象按某一属性排序,它都可以解决这些问题.   比如,有N个对象,每个对象有个属性就是成绩,成绩分:优秀,良好,合格.那我们如何按 ...

  7. CopyOnWriteArrayList集合排序异常问题

    1.集合自定义排序实现 对List集合的自定义排序想必大家都知道要使用如下的方式,通过实现Comparator接口并实现compare方法来实现. /** * * @方法名 changeChain * ...

  8. .Net中集合排序的一种高级玩法

    背景: 学生有名称.学号, 班级有班级名称.班级序号 学校有学校名称.学校编号(序号) 需求 现在需要对学生进行排序 第一排序逻辑 按学校编号(序号)排列 再按班级序号排列 再按学生学号排列 当然,在 ...

  9. Java集合排序及java集合类详解--(Collection, List, Set, Map)

    1         集合框架 1.1         集合框架概述 1.1.1         容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...

随机推荐

  1. 09-Python之路---函数进阶

    Python之路---函数进阶️ 程序员三大美德: 懒惰 因为一直致力于减少工作的总工作量. 缺乏耐性 因为一旦让你去做本该计算机完成的事,你将会怒不可遏. 傲慢 因为被荣誉感冲晕头的你会把程序写得让 ...

  2. 201771010120 苏浪浪 面向对象程序设计(Java)第10周

      1.实验目的与要求 (1) 理解泛型概念: (2) 掌握泛型类的定义与使用: (3) 掌握泛型方法的声明与使用: (4) 掌握泛型接口的定义与实现: (5)了解泛型程序设计,理解其用途. 2.实验 ...

  3. Keyboard Shortcuts Reference

    Sublime Text 3快捷键 Ctrl + Shift + P 打开命令面板 Ctrl + P 搜索项目中的文件 Ctrl + G 跳到第几行 Ctrl + W 关闭当前打开文件 Ctrl + ...

  4. 【Java】几种典型的内存溢出案例,都在这儿了!

    写在前面 作为程序员,多多少少都会遇到一些内存溢出的场景,如果你还没遇到,说明你工作的年限可能比较短,或者你根本就是个假程序员!哈哈,开个玩笑.今天,我们就以Java代码的方式来列举几个典型的内存溢出 ...

  5. h5 编辑单选框的样式

    radio单选框样式设置 input[type=radio] { display: inline-block; vertical-align: middle; width: 20px; height: ...

  6. 【真相揭秘】requests获取网页编码乱码本质

    有没有被网页编码抓狂,怎么转都是乱码. 通过查看requests源代码,才发现是库本身历史原因造成的. 作者是严格http协议标准写这个库的,<HTTP权威指南>里第16章国际化里提到,如 ...

  7. [PHP学习教程 - 文件]002.修改上传文件大小限制(File Upload Limit)

    引言:通常大家直装xampp之后,默认的文件上传大小应该被设定成2M左右,这个时候如果上传超过2M的东西,就会报错,让人非常尴尬.如何修改呢? 导航索引: 概念 FTP常用API FTP封装类 其他 ...

  8. 国际化之fmt标签

    1. 什么是国际化和本地化: I. 本地化:一个软件在某个国家或地区使用时,采用该国家或地区的语言,数字,货币,日期等习惯.II. 国际化:软件开发时,让它能支持多个国家和地区的本地化应用.使得应用软 ...

  9. XMLHttpRequest实现Ajax &数据格式JSON

    GET请求 index <%@ page language="java" contentType="text/html; charset=utf-8" p ...

  10. Vulnerability of SSL to Chosen-Plaintext Attack 读书报告

    这篇文章讲述了在SSL上的选择明文攻击.我想分四个部分讲讲我对这篇文章的理解. 1.CPA的定义: 2.文章讲述SSL相关基本概念漏洞: 3.对SSL的CPA攻击的过程: 4.实现这种攻击的可能性以及 ...