List集合排序的方法
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集合排序的方法的更多相关文章
- Collections -集合排序compareTo方法重写,shuffle,addall
package cn.learn.collection.Collections; /* 排序的对象的类,实现comparable借口,重写compareto方法 若要打印必须重写toString方法, ...
- 关于自定义 List集合排序的方法!
大致流程: 排序是用到排序的接口Comparator<T>你要先建一个类实现比较器Comparator //大致流程public class StuComp implements Comp ...
- JS 对Array集合排序的方法
我的业务是根据距离的远近经行一个排序: 第一种方法:冒泡排序 排序前的数据是这样子的: 排序后是这样子的: 代码可以直接复制使用的: <!doctype html> <html> ...
- Java中List集合排序的方法 比较器的使用 根据学生对象数学 语文 英语成绩总和进行sort排序
package com.swift; import java.util.ArrayList; import java.util.Collections; import java.util.Compar ...
- 【转载】 C#中List集合使用OrderByDescending方法对集合进行倒序排序
在C#的List集合操作中,有时候需要针对List集合进行排序操作,如果是对List集合按照元素对象或者元素对象的某个属性进行倒序排序的话,可以使用OrderByDescending方法来实现,Ord ...
- 【Java进阶】---map集合排序
map集合排序 这篇文章讲的不仅仅是map排序,比如把对象按某一属性排序,它都可以解决这些问题. 比如,有N个对象,每个对象有个属性就是成绩,成绩分:优秀,良好,合格.那我们如何按 ...
- CopyOnWriteArrayList集合排序异常问题
1.集合自定义排序实现 对List集合的自定义排序想必大家都知道要使用如下的方式,通过实现Comparator接口并实现compare方法来实现. /** * * @方法名 changeChain * ...
- .Net中集合排序的一种高级玩法
背景: 学生有名称.学号, 班级有班级名称.班级序号 学校有学校名称.学校编号(序号) 需求 现在需要对学生进行排序 第一排序逻辑 按学校编号(序号)排列 再按班级序号排列 再按学生学号排列 当然,在 ...
- Java集合排序及java集合类详解--(Collection, List, Set, Map)
1 集合框架 1.1 集合框架概述 1.1.1 容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...
随机推荐
- 树状数组区间更新区间查询以及gcd的logn性质
题目描述 给你一个长为n的序列a m次查询 每次查询一个区间的所有子区间的gcd的和mod1e9+7的结果 输入描述: 第一行两个数n,m之后一行n个数表示a之后m行每行两个数l,r表示查询的区间 输 ...
- xv6 操作系统的环境搭建
xv6 是 MIT 设计的一个教学型操纵系统.xv6 可在 Intel X86 框架上运行,为了方便,建议将 xv6 运行在 QEMU 虚拟机器上,本人的实验环境是 ubuntu 18.04 . 1. ...
- .Net基础之4——流程控制
(1)异常捕获 我们在程序中经常会出现各种各样的异常,你如果想要你的程序变得坚强一点. 在你的代码中应该经常性的使用try-catch来进行异常捕获. 语法: try { 可能会出现异常的代码: } ...
- Python之日志处理(logging模块一基础)
转载自:https://www.cnblogs.com/yyds/p/6901864.html 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logg ...
- RAC配置2个私网网卡使用HAIP服务
如果是在oracle 10gRAC, 私网网卡冗余保护只能使用操作系统网卡绑定方式,但是到了oracle 11g,如果担心一个私网网卡故障导致rac节点驱逐,可以使用2个私网网卡,Oracle将自动使 ...
- vue 实例化使用模板
var vm = new Vue({ el:"", data:{ }, methods:{ } })
- 基于Unity实现油画风格的着色器
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Cust ...
- .NET Core 反射获取所有控制器及方法上特定标签
.NET Core 反射获取所有控制器及方法上特定标签 有个需求,就是在. NET Core中,我们想在项目 启动时,获取LinCmsAuthorizeAttribute这个特性标签所有出现的地方,把 ...
- word修改页眉使本页的页眉与别的页不一样
关键回答:双击要修改的页的页眉,word顶端的工具栏“页面设置”当中的“链接到前一个”选项不要选中,即可修改本页页眉使之与别的页不一样. 详见:https://iask.sina.com.cn/b/2 ...
- java内部类简单用法
package innerClass; /** * 特点 * 1:增强封装性,通过把内部类隐藏在外部类的里面,使得其他类不能访问外部类. * 2:增强可维护性. * 3:内部类可以访问外部的成员. * ...