Java 8 –集合sort()方法–按Employe对象(Id,名称,年龄)列出自定义排序示例...

有关在Java中对自定义对象进行排序的完整指南。 Collections.sort()方法基于Comparable或Comparator实现进行排序。 用于对Employee对象进行排序的示例自定义排序

1.简介

在本教程中,您将学习如何在java中对Custom对象进行排序 。 首先,我们将显示示例程序以对字符串列表进行排序,然后移至
自定义Employee的Arraylist的排序排序由Empoyee完成
ID,姓名和年龄 。 本文末尾显示的所有示例均在GitHub上。

2. Collections.sort()示例

Collections类具有一个sort()方法,该方法采用List实现,例如ArrayListLinkedList等。

现在,创建一个带有字符串值的列表,并使用Collections.sort()方法对这些值进行排序。

默认情况下,Collections.sort()方法以升序进行排序。 所有添加到列表中的值必须实现Comparable接口。

如果将null传递给sort()方法,它将抛出java.lang.NullPointerException

2.1字符串排序表

 package com.java.w3schools.blog.collections;  import java.util.ArrayList;  import java.util.Collections;  import java.util.Iterator;  import java.util.List;  /** * * Collections.sort() example to sort List of Strngs. * * @author JavaProgramTo.com * */  public class CollectionSortExample { public static void main(String[] args) { List<String> countries = new ArrayList<>(); countries.add( "Singapore" ); countries.add( "India" ); countries.add( "USA" ); countries.add( "UK" ); countries.add( "Australia" ); System.out.println( "List of countires before sorting : " ); Iterator<String> it = countries.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Collections.sort(countries); System.out.println( "List of countries after sorting :" ); it = countries.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }  } 

输出:

 List of countires before sorting :  Singapore  India  USA  UK  Australia  List of countries after sorting :  Australia  India  Singapore  UK  USA 

2.2整数排序列表

整数素数排序程序列表。

 package com.java.w3schools.blog.collections.sorting;  import java.util.ArrayList;  import java.util.Collections;  import java.util.Iterator;  import java.util.List;  /** * * Collections.sort() example to sort List of Strngs. * * @author JavaProgramTo.com * */  public class CollectionSortIntegersExample { public static void main(String[] args) { List<Integer> primeNumbers = new ArrayList<>(); primeNumbers.add( 19 ); primeNumbers.add( 7 ); primeNumbers.add( 37 ); primeNumbers.add( 59 ); primeNumbers.add( 23 ); System.out.println( "List of integer prime numnbers before sorting : " ); Iterator<Integer> it = primeNumbers.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Collections.sort(primeNumbers); System.out.println( "List of integer prime numnbers after sorting :" ); it = primeNumbers.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }  } 

输出:

 List of integer prime numnbers before sorting :  19  7  37  59  23  List of integer prime numnbers after sorting :  7  19  23  37  59 

参见上面的两个程序,它们按从低到高的升序对整数和字符串按字母顺序进行排序。

如果传递了不同类型的对象,则将获得ClassCastException,如下所示。

 public class CollectionSortClassCastException { public static void main(String[] args) { List values = new ArrayList(); values.add( "Singapore" ); values.add( 737 ); values.add(2323f); Collections.sort(values); }  } 

错误:

 Exception in thread "main" java.lang.ClassCastException: class java.lang.String cannot be cast to class java.lang.Integer (java.lang.String and java.lang.Integer are in module java.base of loader 'bootstrap' ) at java.base/java.lang.Integer.compareTo(Integer.java: 64 ) at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java: 320 ) at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java: 188 ) at java.base/java.util.Arrays.sort(Arrays.java: 1316 ) at java.base/java.util.Arrays.sort(Arrays.java: 1510 ) at java.base/java.util.ArrayList.sort(ArrayList.java: 1749 ) at java.base/java.util.Collections.sort(Collections.java: 143 ) at com.java.w3schools.blog.collections.sorting.CollectionSortClassCastException.main(CollectionSortClassCastException.java: 25 ) 

2.3降序排列

将Comparator传递给sort()方法将按照与升序相反的顺序进行排序。 reverseOrder()方法返回一个比较器以逆转自然顺序。

 Collections.sort(countries, Collections.reverseOrder())  Collections.sort(primeNumbers, Collections.reverseOrder()) 

3.使用员工对象的Java自定义排序

到目前为止,显示了带有Strings和Integers的示例程序。 有一种常见的方案可以对用户定义的对象进行排序,每个访问员都希望更好地了解收集概念。

我们将通过Employe类按ID排序来演示该示例。

首先,使用ID,名称和年龄创建Employee类。

接下来,实现Comparable接口并提供对compareTo()方法的实现。

 package com.java.w3schools.blog.collections.sorting;  public class Employee implements Comparable<Employee> { private int id; private String name; private int age; public Employee( int id, String name, int age) { super (); this .id = id; this .name = name; this .age = age; } 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; } public int getAge() { return age; } public void setAge( int age) { this .age = age; } @Override public int compareTo(Employee o) { if (o.getId() > this .getId()) { return 1 ; } else if (o.getId() < this .getId()) { return - 1 ; } return 0 ; }  @Override public String toString() { return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]" ; }  } 

3.1按ID对Employee对象进行排序

 package com.java.w3schools.blog.collections.sorting;  import java.util.ArrayList;  import java.util.Collections;  import java.util.Iterator;  import java.util.List;  public class CustomEmplpoyeeSortById { public static void main(String[] args) { List<Employee> emps = new ArrayList<>(); emps.add( new Employee( 2001 , "Modi" , 55 )); emps.add( new Employee( 1901 , "Trumph" , 57 )); emps.add( new Employee( 1950 , "Boris Johnson" Employee( "Boris Johnson" , 56 )); System.out.println( "Before sorting custom list of employees : " ); Iterator<Employee> it = emps.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Collections.sort(emps); System.out.println( "After sorting custom list of employees in natural order: " ); it = emps.iterator(); while (it.hasNext()) { System.out.println(it.next()); } Collections.sort(emps, Collections.reverseOrder()); System.out.println( "After sorting custom list of employees in decendng order: " ); it = emps.iterator(); while (it.hasNext()) { System.out.println(it.next()); } }  } 

输出:

 Before sorting custom list of employees :  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1901 , name=Trumph, age= 57 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  After sorting custom list of employees in natural order:  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  Employee [id= 1901 , name=Trumph, age= 57 ]  After sorting custom list of employees in decendng order:  Employee [id= 1901 , name=Trumph, age= 57 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  Employee [id= 2001 , name=Modi, age= 55 ] 

3.2按名称排序Employee对象的列表

更改比较埠名称。

 @Override public int compareTo(Employee o) {   return this .getName().compareTo(o.getName());  } 

现在运行生成按名称排序的程序。

 Before sorting custom list of employees :  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1901 , name=Trumph, age= 57 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  After sorting custom list of employees by name in natural order:  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1901 , name=Trumph, age= 57 ]  After sorting custom list of employees by name in decendng order:  Employee [id= 1901 , name=Trumph, age= 57 ]  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ] 

3.3按年龄排序员工对象列表

根据员工类别的年龄更改比较。

 @Override  public int compareTo(Employee o) { if (o.getAge() > this .getAge()) { return 1 ; } else if (o.getAge() < this .getAge()) { return - 1 ; } return 0 ;  } 

输出:

 Before sorting custom list of employees :  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1901 , name=Trumph, age= 57 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  After sorting custom list of employees by age in natural order:  Employee [id= 1901 , name=Trumph, age= 57 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  Employee [id= 2001 , name=Modi, age= 55 ]  After sorting custom list of employees by age in decendng order:  Employee [id= 2001 , name=Modi, age= 55 ]  Employee [id= 1950 , name=Boris Johnson, age= 56 ]  Employee [id= 1901 , name=Trumph, age= 57 ] 

4. Java 8自定义排序-比较器

通过在Java 8中使用lambda表达式,我们可以如下所示在单行中编写自定义比较器。

 Comparator<Employee> compareByName = (Employee o1, Employee o2) -> o1.getName().compareTo( o2.getName() );  Collections.sort(emps, compareByName); 

上面的代码生成的输出与在第3节示例中看到的相同。

5.结论

在本文中,我们已经看到了如何在Java中对字符串和整数列表进行排序。 排序列表按升序和降序排列。 示例程序可能存在错误。

而且,基于员工ID,姓名和年龄变量的自定义排序。

GitHub代码

翻译自: https://www.javacodegeeks.com/2020/04/java-8-collections-sort-method-list-custom-sort-example-by-employe-objects-id-name-age.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

删除表报正在使用_U盘拔出要不要点quot;安全删除USB硬件quot;退出?

小U盘&#xff0c;大用处。U盘不仅可以用来存储各种各样的文件&#xff0c;甚至还可以用来制作电脑启动盘、Win to Go系统盘等。直接拔还是点“安全删除”后再拔U盘呢&#xff1f;在用完U盘后&#xff0c;有的会点击电脑右下角“安全删除”才拔&#xff0c;有的则会不管那么多直…

cpu性能测试软件 国际象棋,CPU性能评测软件

作者选择100电脑网推荐配置了解最佳配置看首页电脑CPU的评测软件有很多&#xff0c;一般用户用的鲁大师就是国内家喻户晓比较流行的评测软件&#xff0c;但是鲁大师的权威性一直没有被市场充分肯定。在windows系统出到vista后&#xff0c;windows内置了电脑性能评分&#xff0c…

java 参数命名冲突_Java中的命名参数

java 参数命名冲突创建具有许多参数的方法是一个主要的缺点。 每当需要创建这样的方法时&#xff0c;就在空气中闻一闻&#xff1a;这是代码的味道。 强化单元测试&#xff0c;然后进行重构。 没有借口&#xff0c;没有屁股。 重构&#xff01; 使用构建器模式&#xff0c;甚至…

react获取全局_使用react hooks实现的简单全局状态管理

注意,此代码存储库已被弃用,不会再更新维护了.Note that this code repository has been deprecated and will not be updated and maintained.react-simple-global-state-store-hook基于react hooks 和EventTarget 实现的极简全局状态管理 库&#xff0c;可以跨组件共享全局状…

职业规划测试软件,生涯规划常用测试工具

原标题&#xff1a;生涯规划常用测试工具认识自己测试生涯规划关于生涯规划的几个测试上周我们说到中学生很有必要进行生涯规划&#xff0c;在进行生涯规划前&#xff0c;我们需要对自己有一个更清晰、更全面的认识&#xff0c;随着心理学的发展&#xff0c;很多认识自我的测试…

使用SoapUI调用不同的安全WCF SOAP服务-基本身份验证,第一部分

在这个分为三部分的系列中&#xff0c;我将演示如何使用SoapUI API工具来调用安全的WCF SOAP服务。 第一篇文章将着重于创建将要测试的系统的服务。 第二篇文章将介绍在基本身份验证机制保护的情况下调用它所需的步骤。 在最后一部分中&#xff0c;我将对初始服务稍作更改&…

计算机动画分为关键帧动画和,一个最简单的动画最少有几个关键帧

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。一个最简单的动画至少有两个关键帧&#xff0c;两个关键帧中必须是元件&#xff0c;而且必须是同一个元件。要创建使组合体或文字发生颜色渐变的动画&#xff0c;必须先将它们转换为…

python+robotframework_python+robot framework接口自动化测试

转载&#xff1a;http://www.cnblogs.com/nzg-noway/p/6651957.htmlpythonrequests实现接口的请求前篇已经介绍&#xff0c;还有不懂或者疑问的可以访问目前我们需要考虑的是如何实现关键字驱动实现接口自动化输出&#xff0c;通过关键字的封装实现一定意义上的脚本与用例的脱离…

自动装箱和拆箱_自动装箱

自动装箱和拆箱自Java 1.5以来&#xff0c;所有Java开发人员都可以使用自动装箱功能。嗯&#xff0c;我可能太乐观了。 至少所有开发人员都应该可以使用自动装箱。 毕竟&#xff0c;在ORACLE页面上有一个很好的教程。 自动装箱是指Java编译器在需要时自动从原始类型创建用于创…

计算机网络标准体系,计算机网络标准体系结构实验报告.doc

华北电力大学实 验 报 告||试验名称 计算机网络体系结构试验课程名称 计算机网络体系结构||专业班级&#xff1a;网络1202 学生姓名&#xff1a;学 号&#xff1a; 成 绩&#xff1a;指导老师&#xff1a;李丽芬 试验日期&#xff1a;.12.18一、试验目标和要求1&#xff0e;将网…

配置中文_星球大战:战机中队配置需求公布 支持中文

近日《星球大战》系列新作《星球大战&#xff1a;战机中队》公布&#xff0c;该作采用寒霜引擎打造&#xff0c;支持中文。游戏将于2020年10月3日发售&#xff0c;预购价格为238元&#xff0c;登陆Xbox One/PS4/PC(Steam/Origin/Epic)平台&#xff0c;有单人和多人模式&#xf…

为什么在生产中进行硒自动化测试对于您的下一个版本至关重要?

您是否认为仅仅是因为您的Web应用程序在过渡环境中以鲜艳的色彩通过了&#xff0c;您的生产环境也将是相同的吗&#xff1f; 您可能需要重新考虑&#xff01; 特别是&#xff0c;如果我们指的是跨浏览器测试 &#xff0c;则需要确保跨各种操作系统&#xff0c;运行在不同操作系…

手机usb共享计算机网络连接,如何将手机wifi网络通过USB共享给电脑?小编教你共享方法...

曾经就有过这样的情况&#xff0c;家里突然断网了&#xff0c;这时又需要打开电脑接收文件&#xff0c;或是需要在线编辑公众号的文章&#xff0c;着急得很&#xff0c;这时电脑没有网络怎么办呢&#xff1f;能不能使用手机的流量&#xff0c;来让电脑连网呢&#xff1f;有时候…

为全局变量赋值_实例分析如何远离漫天飞舞的全局变量

前篇《由static来谈谈模块封装》基本实现了对外隐藏属性&#xff0c;隐藏局部模块函数&#xff0c;开放接口的功能。对于这个话题还有些点没有深入探讨&#xff1a;为什么要这样做&#xff1f;以及这样做的好处。或许很多刚刚开始用C或者其他面向对象编程语言(比如C)的小伙伴们…

数据库班级字段怎么定义名称_班级名称

数据库班级字段怎么定义名称在Java中&#xff0c;每个类都有一个名称。 类位于包中&#xff0c;这使我们程序员可以一起工作&#xff0c;避免名称冲突。 我可以命名我的班级A &#xff0c;也可以命名您的班级A &#xff0c;只要它们位于不同的程序包中&#xff0c;它们可以很好…

计算机指令取决,不同的计算机,其指令不同,这主要取决于什么?

不同的计算机&#xff0c;其指令系统也不同&#xff0c;这主要取决于所用的CPU。1、CPU指中央处理器&#xff0c;是一块超大规模的集成电路&#xff0c;是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。2、程…

python内存管理方法_Python 内存管理大揭秘

前言语言的内存管理是语言设计的一个重要方面。它是决定语言性能的重要因素。无论是C语言的手工管理&#xff0c;还是Java的垃圾回收&#xff0c;都成为语言最重要的特征。这里以Python语言为例子&#xff0c;说明一门动态类型的、面向对象的语言的内存管理方式。对象的内存使用…

Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

在之前的一系列博客中&#xff0c;我们在Kubernetes集群上启动了一个Ignite集群。 在本教程中&#xff0c;我们将使用先前在Spring Boot Application上创建的Ignite集群。 让我们使用Spring Boot创建我们的项目。 Spring Boot应用程序将连接到Ignite集群。 让我们添加依赖项…

计算机VB整除,【原创】VB中的整除运算和转换函数

前言&#xff1a;【关于四舍五入】——实际上是相对小数部分<0.5 舍&#xff1b;0.5 看整数部分&#xff0c;若为奇数则进&#xff0c;若为偶数则舍&#xff1b;>0.5 进整除运算“\”作用&#xff1a;用于对两个数进行除法运算并返回一个整数例如&#xff1a;18\53 …

栈空间_Linux中的进程栈和线程栈

1. 进程栈进程栈是属于用户态栈&#xff0c;和进程虚拟地址空间 (Virtual Address Space) 密切相关。那我们先了解下什么是虚拟地址空间&#xff1a;在 32 位机器下&#xff0c;虚拟地址空间大小为 4G。这些虚拟地址通过页表 (Page Table) 映射到物理内存&#xff0c;页表由操作…