java中Comparator函數的用法實例?

在Java中,Comparator接口用于比較兩個對象的順序,常用于集合的排序。自Java 8開始,Comparator接口得到了增強,提供了許多默認方法,使得排序邏輯更加靈活和強大。下面將通過幾個實例來展示Comparator的用法。

示例1:基本使用

假設我們有一個Person類,包含nameage兩個屬性,我們想按照年齡對Person對象進行排序:

 

Java

深色版本

1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5
6class Person {
7    String name;
8    int age;
9
10    public Person(String name, int age) {
11        this.name = name;
12        this.age = age;
13    }
14
15    @Override
16    public String toString() {
17        return "Person{" +
18               "name='" + name + '\'' +
19               ", age=" + age +
20               '}';
21    }
22}
23
24public class ComparatorExample {
25    public static void main(String[] args) {
26        List<Person> people = new ArrayList<>();
27        people.add(new Person("Alice", 30));
28        people.add(new Person("Bob", 25));
29        people.add(new Person("Charlie", 35));
30
31        // 按照年齡升序排序
32        Collections.sort(people, new Comparator<Person>() {
33            @Override
34            public int compare(Person o1, Person o2) {
35                return Integer.compare(o1.age, o2.age);
36            }
37        });
38
39        // 輸出排序后的結果
40        for (Person person : people) {
41            System.out.println(person);
42        }
43    }
44}

示例2:使用lambda表達式

在Java 8中,可以使用lambda表達式簡化Comparator的實現:

 

Java

深色版本

1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5
6public class ComparatorExample {
7    public static void main(String[] args) {
8        List<Person> people = new ArrayList<>();
9        people.add(new Person("Alice", 30));
10        people.add(new Person("Bob", 25));
11        people.add(new Person("Charlie", 35));
12
13        // 使用lambda表達式進行排序
14        Collections.sort(people, (p1, p2) -> Integer.compare(p1.age, p2.age));
15
16        // 輸出排序后的結果
17        people.forEach(System.out::println);
18    }
19}

示例3:鏈式調用

Java 8的Comparator提供了thenComparing方法,可以進行鏈式調用,實現多重排序:

 

Java

深色版本

1import java.util.ArrayList;
2import java.util.Collections;
3import java.util.Comparator;
4import java.util.List;
5
6public class ComparatorExample {
7    public static void main(String[] args) {
8        List<Person> people = new ArrayList<>();
9        people.add(new Person("Alice", 30));
10        people.add(new Person("Bob", 30));
11        people.add(new Person("Charlie", 25));
12
13        // 先按年齡排序,年齡相同時按名字排序
14        Collections.sort(people, Comparator.comparingInt(Person::getAge)
15                                          .thenComparing(Comparator.comparing(Person::getName)));
16
17        // 輸出排序后的結果
18        people.forEach(System.out::println);
19    }
20}

在上述示例中,Comparator.comparingIntComparator.comparing方法用于創建Comparator實例,它們可以分別用于基本類型和對象類型的比較。thenComparing方法用于鏈接多個比較器,實現復合排序。

以上就是Comparator在Java中的基本用法,它極大地簡化了集合排序的代碼實現,使得排序邏輯更加清晰和易于維護。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/43250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/43250.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/43250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用PyTorch設計卷積神經網絡(CNN)來處理遙感圖像Indian Pines數據集

目錄 使用PyTorch設計卷積神經網絡&#xff08;CNN&#xff09;來處理遙感圖像Indian Pines數據集&#xff0c;以下是設計和實現這些網絡的步驟&#xff1a; 1.數據準備&#xff1a; 1.1 首先&#xff0c;需要加載Indian Pines數據集。 1.2 將數據集轉換為PyTorch張量&#x…

LLM推理引擎怎么選?TensorRT vs vLLM vs LMDeploy vs MLC-LLM

LLM擅長文本生成應用程序&#xff0c;如聊天和代碼完成模型&#xff0c;能夠高度理解和流暢。但是它們的大尺寸也給推理帶來了挑戰。有很多個框架和包可以優化LLM推理和服務&#xff0c;所以在本文中我將整理一些常用的推理引擎并進行比較。 TensorRT-LLM TensorRT-LLM是NV發布…

imazing電腦怎么下載 imazing怎么下載軟件 使用iMazing下載和卸載Apple設備上的應用程序

iMazing官方版是一款管理蘋果設備的軟件&#xff0c;是一款幫助用戶管理 iOS手機的PC端應用程序&#xff0c;能力遠超 iTunes 提供的終極 iOS 設備管理器。在iMazing官方版上與蘋果設備連接后&#xff0c;可以輕松傳輸文件&#xff0c;瀏覽保存信息等&#xff0c;功能比iTunes更…

泛微開發修煉之旅--35關于基于頁面擴展和自定義按鈕實現與后端交互調用的方法

文章鏈接&#xff1a;35關于基于頁面擴展和自定義按鈕實現與后端交互調用的方法

vue3中使用 tilwindcss報錯 Unknown at rule @tailwindcss

解決方法&#xff1a; vscode中安裝插件 Tailwind CSS IntelliSense 在項目中的 .vscode中 settings.json添加 "files.associations": {"*.css": "tailwindcss"}

基于YOLOv9的腦腫瘤區域檢測

數據集 腦腫瘤區域檢測&#xff0c;我們直接采用kaggle公開數據集&#xff0c;Br35H 數據中已對醫學圖像中腦腫瘤位置進行標注 數據集我已經按照YOLO格式配置好&#xff0c;數據內容如下 數據集中共包含700張圖像&#xff0c;其中訓練集500張&#xff0c;驗證集200張 模型訓…

Perl語言入門到高級學習

Perl語言介紹 Perl,全稱為Practical Extraction and Report Language,即“實用報表提取語言”,是一種高級、通用、直譯式、動態的編程語言。Perl最初由Larry Wall設計,并于1987年12月18日首次發布。經過多年的不斷發展和更新,Perl已經成為一種功能豐富且應用廣泛的計算機程…

AI繪畫:藝術與科技的交融,創新浪潮與無限可能

在科技日新月異的當下&#xff0c;AI 繪畫作為人工智能領域的一顆璀璨新星&#xff0c;正以驚人的速度在國內嶄露頭角&#xff0c;引發了藝術與技術交融的全新變革。隨著人工智能技術的飛速發展&#xff0c;AI繪畫已成為藝術與科技交融的新寵。2024年&#xff0c;AI繪畫行業在國…

昇思MindSpore學習筆記2-03 LLM原理和實踐--基于MindSpore通過GPT實現情感分類

摘要&#xff1a; 昇思MindSpore AI框架中使用openai-gpt的方法、步驟。 沒調通&#xff0c;存疑。 一、環境配置 %%capture captured_output # 實驗環境已經預裝了mindspore2.2.14&#xff0c;如需更換mindspore版本&#xff0c;可更改下面mindspore的版本號 !pip uninsta…

Autogen智能體實戰-Autogen框架介紹

文章目錄 一&#xff0c;Autogen簡介二&#xff0c;Autogen原理1&#xff0c;Autogen原理圖解2&#xff0c;拆解Autogen是如何完成繪制特斯拉股票趨勢圖的 這篇文章介紹一個開源的Agent框架-微軟的Autogen。 一&#xff0c;Autogen簡介 官網:https://microsoft.github.io/aut…

前端頁面操作防抖函數封裝及應用

1、使用背景 函數防抖其實是作為一名前端同學必備的技能了&#xff0c;之前一直偷懶都借用頁面loading或者按鈕loading來實現。最近在開發微信小程序&#xff0c;過多的loading會帶來不好的體驗&#xff0c;同時在跳轉頁面的時候&#xff0c;不好用loading來防抖。所以就會出現…

【Unity】RPG2D龍城紛爭(九)戰斗系統之角色移動

更新日期:2024年7月8日。 項目源碼:第五章發布(正式開始游戲邏輯的章節) 索引 簡介一、角色戰斗狀態二、角色移動1.角色起飛(移動前)2.角色降落(移動后)3.生成移動路徑4.角色移動三、整合簡介 之前的章節做了這么多準備工作,現在終于要進入我們最為核心的戰斗系統的編…

在idea中查看某個接口的所有實現類圖

一、選中某個接口右鍵 ---> Diagrams ---> show Diagrams&#xff0c;然后就會進入一個新的 tab 頁&#xff1b; 二、然后在出來的圖上選中某個接口右鍵 ---> show Implementations&#xff0c;就會顯示選中接口的所有實現類列表&#xff1b; 三、最后 ctrl A 全部選…

Defender Cloud Apps部署方案

目錄 Defender Cloud Apps是什么? Defender Cloud Apps&#xff1a;保護您的云應用程序免受威脅 1. 全面的云應用發現與評估 2. 實時的用戶活動監控 3. 深度的數據保護 4. 合規性管理與報告 5. 統一的安全管理 Defender Cloud Apps主要功能 1. 可見性和洞察 2. 數據保…

uniapp父頁面調用子頁面 組件方法記錄

文章目錄 導文如何點擊父頁面&#xff0c;觸發子頁面函數先寫一個子頁面的基礎內容父元素 如何點擊父頁面&#xff0c;修改子頁面的值先寫一個子頁面的基礎內容父元素 導文 如何點擊父頁面&#xff0c;觸發子頁面函數&#xff1f; 如何點擊父頁面&#xff0c;修改子頁面的值&am…

英區PayPal賬號3分鐘綁定WISE英鎊的銀行收款賬戶

正文開始&#xff0c;我們先登錄英區PayPal賬號后 有很多銀行給我們選擇&#xff0c;但是沒有WISE的選項&#xff0c;所以我們手動輸入“WISE”&#xff0c;然后如下圖所示點擊“Enter Your Bank Detailds”輸入銀行詳細信息按鈕。 然后輸入我們的WISE英鎊賬戶的收款銀行信息&a…

Advanced Electronic Materials:磁性智能皮膚作為人機界面

近年來&#xff0c;電子可穿戴設備的普及率迅速上升&#xff0c;柔性可穿戴設備因其高生物相容性、功能性、適應性和低成本而在人機界面上引起了極大的關注。柔性磁性智能皮膚是這一快速發展的柔性可穿戴電子領域的一部分&#xff0c;為人類感知發展開辟了一條新的道路。磁感是…

SpringCloud第一篇Docker基礎

文章目錄 一、常見命令二、數據卷三、數據掛載四、自定義鏡像五、網絡 一、常見命令 Docker最常見的命令就是操作鏡像、容器的命令&#xff0c;詳見官方文檔&#xff1a; https://docs.docker.com/ 需求&#xff1a; 在DockerHub中搜索Nginx鏡像&#xff0c;查看鏡像的名稱 …

k8s集群如kubeadm init和kube-flannel.yam問題

查看k8s中角色內容kubectl get all (顯示pod和server以及delment) 刪除應用資源選擇刪除先刪除部署查看部署和pod沒了服務還在&#xff0c;但資源和功能以及刪除&#xff0c;刪除服務kubectl delete 服務名&#xff08;部署名&#xff09;&#xff0c;get pods 獲取默認空間的容…

A133 Android10 root修改

1.前言 客戶應用需求root相關的權限&#xff0c;我們需要修改系統的權限才可以滿足客戶需求 2.修改方法 frameworks層&#xff1a;注釋掉 diff --git a/frameworks/base/core/jni/com_android_internal_os_Zygote.cpp b/frameworks/base/core/jni/com_android_internal_os_…