還是java牛逼,一行代碼搞定各種排序

2021-03-02 路人甲Java

大家好,這裡是路人甲Java,文末領取《2020版面試通關手冊》

排序大家都經常用的吧,下面是個學生類,2 個欄位:id[學號],score[分數],

public class Stu {
    //編號
    private Integer id;
    //分數
    private Integer score;

    public Stu(Integer id, Integer score) {
        this.id = id;
        this.score = score;
    }

    // getter、setter大家自己補上

    @Override
    public String toString() {
        return "Stu{" +
                "id=" + id +
                ", score=" + score +
                '}';
    }
}

來個集合,放幾個學生進去

List stuList = new ArrayList<>();
stuList.add(new Stu(2, 30));
stuList.add(new Stu(1, 30));
stuList.add(new Stu(3, 50));
stuList.add(new Stu(4, 40));

需求:score desc,id asc 對 stuList 中的學生信息進行排序,然後輸出結果,用 java 實現特別的簡單,2 行代碼搞定,如下:

stuList.stream().sorted(Comparator.comparing(Stu::getScore).reversed().thenComparing(Stu::getId)).forEach(System.out::println);

輸出結果

Stu{id=3, score=50}
Stu{id=4, score=40}
Stu{id=1, score=30}
Stu{id=2, score=30}

是不是特別簡單,這裡使用到了 java 中的 stream 來操作的,stream 中有個 sorted 方法,需傳入比較器:Comparator,我們傳入的是:

Comparator.comparing(Stu::getScore).reversed().thenComparing(Stu::getId)。

解釋一下代碼

Comparator.comparing(Stu::getScore) 得到score升序比較器
Comparator.comparing(Stu::getScore).reversed():將score升序比較器反轉,那麼就得到score降序比較器
Comparator.comparing(Stu::getScore).reversed().thenComparing(Stu::getId):注意這裡面用到了thenComparing,這個表示前面的比較器得到的結果相同的時候,走thenComparing函數中指定的比較方式,即按照Stu中的id升序排序。

這個案例搞懂了,那麼平時我們需要的各種排序,基本上都可以搞定了。

更多內容 文末領取《2020版面試通關手冊》4、文末掃碼領取《2020 版 java 面試通關手冊》

下面給大家送上面試通關手冊,按分類都整理好了,查看特別的方便,便於快速突破自己薄弱的環節,拿下 offer(文末掃碼領取)

按分類都整理好了,便於查看,快速各個擊破

獲取方式:掃描下面二維碼,發送:通關

相關焦點

  • 實現一個在JNI中調用Java對象的工具類,從此一行代碼就搞定!
    函數的時候,就一行代碼就可以搞定了,比如String.length():jint len = callIntMethod(env, str, "length", "()I")這樣就可以大大減少了代碼量,而且代碼也更易讀了。
  • 一行JAVA代碼如何運行起來?
    然而在你進入軟體程序開發之後,你會發現即使開發語言千千萬,最盛行的還是JAVA。不過JAVA語言的上手難度就比PHP、前端高很多了,所以今天我們給大家講解下一行JAVA代碼到底是如何運行起來的,JAVA後浪們可以以此為入門Java的基礎,開啟Java開發、人生贏家之路。Java是一種半解釋型語言,相對的有解釋型語言Python&PHP、編譯型語言C&C++。
  • Java實現冒泡排序算法
    有人說,我是做業務開發的,只要熟練API,熟練框架,熟練各種中間件,寫的代碼不也能「飛」起來嗎?於是問題來了:為什麼還要學習數據結構與算法呢?我想好了,還是需要學習數據結構與算法。但是我有兩個困惑:1.如何著手學習呢?2.有哪些內容要學習呢?
  • 坑爹代碼 | 你寫過的最長的一行代碼有多長???
    你寫過的最長的一行代碼有多長嗎?你為什麼要寫這麼長?是看著帥呢,還是想減少代碼行數?purchaseInfo.getExteriorOperation().getExteriorPart().getTeamwork().equals(sheet.getTeamwork()))).collect(Collectors.toList());上面這段代碼雖然被拆開多行顯示,但本質上是一行,一個極其複雜的賦值語句!
  • Java程式設計師必備基礎:Java代碼是怎麼運行的?
    因此,在運行Java程序之前,需要編譯器把代碼編譯成java虛擬機所能識別的指令程序,這就是Java字節碼,即class文件。 所以,Java代碼運行的第一步是:把Java原始碼編譯成.class 字節碼文件。
  • 一文圖解 Java 源碼的插入排序算法
    資料地址:https://en.wikipedia.org/wiki/External_sorting上一篇《程序兵法:Java String 源碼的排序算法(一)》,講到了 java.lang.Comparable 接口。那麼接口是一個抽象類型,是抽象方法(compareTo)的集合,用 interface 來聲明。
  • java中的兩種排序工具Arrays和Collections的使用
    java中的排序工具主要是有兩個Arrays和Collections。我們一個一個來講解。本來寫好了每一種方法的測試代碼,後來又給刪了,因為我覺得如果想要去了解的話,可以直接查看這些常用的即可。因為使用起來真的太簡單。篇幅太長也不好。一、ArraysArrays類位於 java.util 包中,主要包含了操縱數組的各種方法。
  • SelectionSort 選擇排序算法詳解(java 實現)
    java 實現package com.github.houbb.sort.core.api;import com.github.houbb.log.integration.core.Log;import
  • 基礎不牢地動山搖記住 Java 面試中常用的八種排序算法與代碼實現
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫1.直接插入排序經常碰到這樣一類排序問題:把新的數據插入到已經排好的數據列中。
  • Java map詳解-用法、遍歷、排序、常用API
    2、☞ 《Java面試手冊》.PDF    點擊查看Map用法類型介紹java 自帶了各種 Map 類,這些 Map 類可歸為三種類型:用於在應用程式中管理映射,通常在 java.util 程序包中實現 HashMap、Hashtable、Properties、LinkedHashMap
  • 用java判斷數字的奇偶性原來這麼的簡單!
    這裡是java小白成長記!小編不知不覺自學java一個多月了,學的東西也慢慢有了難度,不過還是很感興趣的,還是依舊堅持著,真的是苦並快樂著,哈哈。有沒有同樣樂趣的小夥伴來結個伴,一起交流學習,或者那個大佬能指點一二,本人萬分感激!!!!!!昨天分享了java中if循環的語法格式,今天就舉個列子熟悉熟悉。
  • Java的synchronized 能防止指令重排序嗎?
    「二胖」:好的,我叫二胖,我來自長沙,今年25歲,從事java開發快3年了,現在在XX公司XX事業部擔任高級「java」開發工程師,主要負責XX系統。。。。。「面試官」:好的,我看你簡歷上寫著熟練掌握並發編程你能跟我說說並發編程裡面你都知道哪些關鍵字。
  • 簡潔且實用Python一行代碼,40個案例講解
    有時候看似複雜的任務,甚至是可以使用一行Python代碼就可以搞定。下面Peter給大家介紹40個有趣且實用的Python的一行代碼,讓我們一起來感受Python的強大~1、列印hello python 每個人都是從print函數開始的print("hello python")
  • Java中常見的排序算法有哪些?---冒泡排序
    排序相關的的基本概念排序: 將一組雜亂無章的數據按一定的規律順次排列起來。數據表( data list): 它是待排序數據對象的有限集合。排序碼(key):通常數據對象有多個屬性域,即多個數據成員組成,其中有一個屬性域可用來區分對象,作為排序依據。該域即為排序碼。
  • Java面試題:如何對HashMap按鍵值排序
    通過使用這個Entry <K,V>對象,我們可以根據值來排序HashMap。2.創建一個簡單的HashMap,並插入一些鍵和值。我們將排序這個鍊表來解決順序問題。我們之所以要使用鍊表來實現這個目的,是因為在鍊表中插入元素比數組列表更快。
  • 經典排序算法一 冒泡排序(JAVA實現)
    舉例說明:{3,1,5,7,9,2}下圖中第一列為排序前的數組,第二列為開始排序直至最後一列排序結束是每一輪冒泡排序的結果,2就像一個氣泡一樣一直上升,這應該就是冒泡排序名稱的由來。冒泡排序圖片說明下面為java代碼以及測試過程輸出結果:public static void main(String[] args) {int array[] = {3,1,5,7,9,2}; for
  • 堆排序與拓撲排序(Java模板)
    1.堆排序思想(1) 以升序排序為例,我們需要構建一個小根堆。第一種方法:用數組模擬小根堆。忘記了的朋友可以看看之前的文章《堆模板(Java)》認真複習一下~第二種方法:使用 java.util.PriorityQueue ,相當於一個堆結構。
  • 如何確定字符串是英語還是Java代碼?
    第一個是Java代碼,第二個是英語。如何檢測第一個是代碼,第二個是英語?Java代碼可能不是可解析的,因為它不是完整的方法/語句/表達式。以下提供了針對此問題的解決方案。有時,代碼和英語之間沒有清晰的界線,準確性不能達到100%。但是,使用下面的解決方案,您可以輕鬆地調整程序以適合您的需求。
  • Java 8的Stream代碼,你能看懂嗎?
    ,發現用了Java 8 Stream的特性,而且比較複雜(即便用了Stream也寫了15行代碼)。Stream API可以極大提高Java程式設計師的生產力,讓程式設計師寫出高效率、乾淨、簡潔的代碼。這種風格將要處理的元素集合看作一種流,流在管道中傳輸,並且可以在管道的節點上進行處理,比如篩選,排序,聚合等。Stream有以下特性及優點:無存儲。
  • Excel小技巧:排序自動填充序號的兩種方法
    ▲【EXCEL小學堂】分享辦公軟體小技巧▲屏幕右上角點【關注】,跟著小E君一起進步一般用過 Excel 都知道,排序的時候輸入連續的序號只要輸入前面幾位,後面的序號只要選擇前面兩位然後等滑鼠變實心十字,然後往下拉就搞定了。