JAVA8 使用心得(五)--排序

2024-05-12 03:18
文章标签 java 心得 排序 使用

本文主要是介绍JAVA8 使用心得(五)--排序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在实际开发中,根据前端展示的各种需求,对集合数据的排序是十分有必要的。

知识储备

java的Collections.sort算法调用的是合并排序,它是稳定排序,当数据接近有序的时候,效率 更高,collections中的数据在排序前需要输入到array中,接着调用Arrays.sort函数来完成对象排序。
实现代码:

void mergerSort(int[] a){int len = a.lenght()int mid = len>>2if(len>1){int[] pre=a[0:mid);int[] after=a[mid:len);mergerSort(pre);mergerSort(after);merge(a,pre,after)}
}

示例代码:
基础类:

//用户类
public class User implements Comparable<User>{private int id;private String name;/** getters and setters**/@Overridepublic int compareTo(@NotNull User user) {return this.id - user.getId ();//正序(此写法针对数值型数据)}
}

下面几种排序方式都是基于 Comparator或Comparable,可以类比着理解。

(一)stream().sorted()

public class MyTest {private List<User> users = new ArrayList<> ();@Beforepublic void prepareInitData(){//准备初始测试数据for(int i=0;i<20;i++){User user = new User();user.setId (i);user.setName ("user"+i);users.add (user);}}@Testpublic void test(){//1.User::getId方式 《等价于》 u1 -> u1.getId()List<User> newUsers = users.stream ().sorted (Comparator.comparingInt (User::getId).reversed ()).collect (Collectors.toList ());//2.(o1,o2)方式newUsers = users.stream ().sorted ((o1, o2) -> {if(o1.getId ()>o2.getId ()){return 1;//会将o1顺序下调}else if(o1.getId ()<o2.getId ()){return -1;//会将o1顺序上调}else {return 0;//o1顺序不变}}).collect (Collectors.toList ());//3.若User实现了Comparable接口并重写了compareTo方法,可以使用User::compareTonewUsers = users.stream ().sorted (User::compareTo).collect (Collectors.toList ());newUsers.stream ().forEach (userInfoDto -> System.out.println (userInfoDto.getName ()));}
}

排序结果: 根据ID字段升序排列。

(二)Collections.sort ()

@Test
public void test(){//1.User::getId方式 《等价于》 u1 -> u1.getId()Collections.sort (users, (o1, o2) -> {if(o1.getId ()>o2.getId ()){return 1;//下移o1}else {return -1;//上移o1}});//2.若User实现了Comparable接口并重写了compareTo方法,可以使用User::compareTo//或是直接用users做入参,前提与User::compareTo的相同Collections.sort (users, User::compareTo);//等价于Collections.sort (users);users.stream ().forEach (userInfoDto -> System.out.println (userInfoDto.getName ()));
}

(三)集合自带的.sort方法

@Test
public void test(){//1.根据compareTo进行排序//需要User实现Comparable接口并重写了compareTo方法users.sort (User::compareTo);//2.(o1,o2)方式users.sort ((o1, o2) -> {if(o1.getId ()>o2.getId ()){return 1;//下移o1}else {return -1;//上移o1}});
}

这篇关于JAVA8 使用心得(五)--排序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用powershell筛选AD域控不能自主更改的用户并变更

# 查询“用户不能更改密码”为勾选状态的所有域用户,将域账户、姓名、勾选状态作为结果保存到C:\result\result.csvGet-ADUser -Filter * -Properties CannotChangePassword | Where-Object { $_.CannotChangePassword -eq $true } | Select SamAccountName, Nam

整蛊软件/插件使用方法与配置步骤~

今天出一期整蛊软件的使用方法与配置步骤 很多人在使用整蛊软件的时候 想自己添加更多的玩法内容 但是还不知道如何去配置 这期给大家出一下图文教程步骤 基本上也是软件的功能介绍使用方式~ 案例可扫码查看 第一步:打开软件输入卡密登录: 卡密费用(自费): 卡密有;年卡(99),永久卡(179),按照激活时间计算时长,具体的以你登录的时间为准~ 弹幕获取方式:

QMap使用详解

QMap使用详解 1. 实例化 `QMap` 对象2. 插入数据3. 移除数据4. 遍历数据5. 由键查找对应键值6. 由键值查找键7. 修改键值8. 查找是否包含某个键9. 获取所有的键和键值10.清除数据11.一个键对应多个值12.QMultiMap 遍历数据13.完整示例代码14.使用自定义键类型的 `QMap`示例:使用自定义键类型的 `QMap`步骤 1:定义自定义键类型步骤 2:

boost库asio详解5——resolver与endpoint使用说明

tcp::resolver一般和tcp::resolver::query结合用,通过query这个词顾名思义就知道它是用来查询socket的相应信息,一般而言我们关心socket的东东有address,port而已,通过tcp::resolver很容易实现设置和查询,它通过query把字符串格式的ip如192.168.0.200或主机名http://localhost,端口“8080”等转化成so

boost库asio详解4——deadline_timer使用说明

deadline_timer和socket一样,都用io_service作为构造函数的参数。也即,在其上进行异步操作,都将导致和io_service所包含的iocp相关联。这同样意味着在析构 io_service之前,必须析构关联在这个io_service上的deadline_timer。 1. 构造函数 在构造deadline_timer时指定时间。 [cpp]   view

基于springboot的城市垃圾分类管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的城市垃圾分类管理系统,java项目。 eclipse和idea都能打开运行。 推荐环境配置:eclipse/idea

C++06:使用OTL操作Oracle数据库

一、编写代码 注:以下代码来自OTL示例 /* * otl_test.cpp * */ #include <iostream>using namespace std;#include <cstdio>#define OTL_ORA10G_R2 // Compile OTL 4.0/OCI10gR2#include <otlv4.h> // include the OTL 4.0 hea

C++04:使用Boost-小试Regex库

一、编写代码 下面代码实现的功能:找出html文件中的所有链接 /** regex_test.cpp**/#include <iostream>#include <fstream>#include <string>#include <boost/regex.hpp>using namespace std;int main(int argc, char* argv[]) {if (arg

C++05:使用ACE-用ACE实现简易Echo Server

一、编写代码 /** ace_echo_server.cpp**/#include <iostream>#include <string>#include <cctype>#include <ace/INET_Addr.h>#include <ace/SOCK_Stream.h>#include <ace/SOCK_Acceptor.h>#include <ace/Log_Msg.h

如何 用JavaSpringBoot生成二维码与条形码

前言 在当今的数字化转型浪潮中,二维码已经成为了一种不可或缺的信息交流手段。从产品标签到活动宣传单,再到电子支付,二维码的应用无处不在。本文将详细指导您如何在Spring Boot应用程序中集成ZXing库,以实现QR码的创建和解析功能。无论您希望为您的产品增添QR码功能,还是为移动应用添加扫描功能,本文都将为您提供清晰、实用的指导。 一、QR码与ZXing库简介 QR码,全称为Qui