姓名升序,若相同则按照年龄升序——集合的几种排序方式(有问必答版)

2024-04-16 13:36

本文主要是介绍姓名升序,若相同则按照年龄升序——集合的几种排序方式(有问必答版),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

见者有缘,缘来好运。诚邀各位围观我的博客【CS_GUIDER】:
我的云服务器到期了,所以这里放两个部署在码云和 GitHub 的链接:
https://wlei224.gitee.io (Gitee托管,速度极快)
https://wl2o2o.github.io(Github托管,点击有╰
°▽°
╯)

我的开源博客涵盖了八股文Java基础JVMMySQLLinux框架技术算法以及其他领域的文章,博客域名长期有效!!!如果说对您来说有用,请收藏号链接奥。万分感谢。请放心,开源博客,没有任何套路。

个人博客建站教程长期不定时连载,囊括我基于 Hexo | fluid 主题的搭建版本记录以及搭建踩坑记录,还有基于原 fluid 主题增加的小功能,如果感兴趣,欢迎大家在页脚评论区咨询。
博客文章

不bb,直接上源码

package com.wl2o2o.javau8g;import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;/*** 实现集合排序的几种方式* @Author <a href="https://github.com/wl2o2o">程序员CSGUIDER</a>* @From <a href="https://wl2o2o.github.io">CSGUIDER博客</a>* @CreateTime 2024/4/15*/public class CollectionSort {public static class Student implements Comparable<Student>{private String name;private int age;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;}public Student(String name, int age) { this.name = name; this.age = age;}@Overridepublic String toString() {return "Student {" +"name='" + name + '\'' +", age=" + age +'}';}// 重写比较规则:按姓名升序,姓名相同按年龄升序@Overridepublic int compareTo(Student o) {int flag = this.name.compareTo(o.name);if (flag == 0) {return this.age - o.age;} else {return flag;}}}public static void main(String[] args) {List<Student> students = new ArrayList<>();students.add(new Student("Alice", 20));students.add(new Student("Bob", 22));students.add(new Student("Judy", 18));students.add(new Student("cS", 18));students.add(new Student("Alice", 23));students.add(new Student("Charlie", 20));System.out.println("Before sorting:");for (Student student : students) {System.out.println(student);}// 方式一:适用于类已经实现 Compareable 接口,标明这个类具备可排序的能力// Student 类实现 Compareable 接口、重写 compareTo 方法// Collections.sort(students);// 方式二:适用于类不具备排序能力,但要求排序时// 借助 Comparator 接口,直接实现 compare 方法// Collections.sort(students, (o1, o2) -> {//     int flag = o1.name.compareTo(o2.name);//     if (flag == 0) {//         // 升序//         return o2.age - o1.age;//     } else {//         return flag;//     }// });// 方式二优化:(可以通过reversed()方法进行降序)// Collections.sort(students, Comparator.comparing(Student::getName).reversed().thenComparing(Student::getAge));// 方式三:使用 Stream API + Student 类实现 Comparator 接口,重写 compareTo 方法// List<Student> collect = students.stream().sorted().collect(Collectors.toList());// collect.forEach(System.out::println);// 方式四:使用 Stream API + 自实现 Comparator 接口students.stream().sorted((o1, o2)->{int flag = o1.name.compareTo(o2.name);if (flag == 0) {return o1.age - o2.age;} else {return flag;}}).collect(Collectors.toList()).forEach(System.out::println);// 方式四优化:// List<Student> collect = students.stream().sorted(Comparator.comparing(Student::getName).thenComparing(Student::getAge)).collect(Collectors.toList());// System.out.println("After sorting:");// collect.forEach(System.out::println);System.out.println("After sorting:");for (Student student : students) {System.out.println(student);}System.out.println("All tests passed.");}}

代码解释

如果你对部分代码存有疑惑、集合排序核心原理是怎么样?、评论区留下问题,我来解释,有问必答!

这篇关于姓名升序,若相同则按照年龄升序——集合的几种排序方式(有问必答版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/908933

相关文章

如何突破底层思维方式的牢笼

我始终认为,牛人和普通人的根本区别在于思维方式的不同,而非知识多少、阅历多少。 在这个世界上总有一帮神一样的人物存在。就像读到的那句话:“人类就像是一条历史长河中的鱼,只有某几条鱼跳出河面,看到世界的法则,但是却无法改变,当那几条鱼中有跳上岸,进化了,改变河道流向,那样才能改变法则。”  最近一段时间一直在不断寻在内心的东西,同时也在不断的去反省和否定自己的一些思维模式,尝试重

idea lanyu方式激活

访问http://idea.lanyus.com/这个地址。根据提示将0.0.0.0 account.jetbrains.com添加到hosts文件中,hosts文件在C:\Windows\System32\drivers\etc目录下。点击获得注册码即可。

以canvas方式绘制粒子背景效果,感觉还可以

这个是看到项目中别人写好的,感觉这种写法效果还可以,就存留记录下 就是这种的背景效果。如果想改背景颜色可以通过canvas.js文件中的fillStyle值改。 附上demo下载地址。 https://download.csdn.net/download/u012138137/11249872

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

vue子路由回退后刷新页面方式

最近碰到一个小问题,页面中含有 <transition name="router-slid" mode="out-in"><router-view></router-view></transition> 作为子页面加载显示的地方。但是一般正常子路由通过 this.$router.go(-1) 返回到上一层原先的页面中。通过路由历史返回方式原本父页面想更新数据在created 跟mounted

数据结构9——排序

一、冒泡排序 冒泡排序(Bubble Sort),顾名思义,就是指越小的元素会经由交换慢慢“浮”到数列的顶端。 算法原理 从左到右,依次比较相邻的元素大小,更大的元素交换到右边;从第一组相邻元素比较到最后一组相邻元素,这一步结束最后一个元素必然是参与比较的元素中最大的元素;按照大的居右原则,重新从左到后比较,前一轮中得到的最后一个元素不参4与比较,得出新一轮的最大元素;按照上述规则,每一轮结

二叉树三种遍历方式及其实现

一、基本概念 每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 3、对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0 = n2 + 1。 满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 在满二叉树中若其深度为h,则其所包含

七种排序方式总结

/*2018.01.23*A:YUAN*T:其中排序算法:冒泡排序,简单排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序*/#include <stdio.h>#include <math.h>#include <malloc.h>#define MAXSIZE 10000#define FALSE 0#define TRUE 1typedef struct {i

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

Python几种建表方法运行时间的比较

建立一个表[0,1,2,3.......10n],下面几种方法都能实现,但是运行时间却截然不同哦 import time#方法一def test1(n):list=[]for i in range(n*10):list=list+[i]return list#方法二def test2(n):list=[]for i in range(n*10):list.append(i)#方法三d