最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java對中文進行排序的實現(xiàn)示例

 更新時間:2024年02月20日 10:25:47   作者:Charge8  
工作中,我們經(jīng)常會遇到需要進行各種排序的需求,本文主要介紹了Java對中文進行排序的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下

一、Java排序

Java中類通常實現(xiàn) Comparable接口或者 Comparator接口進行排序。

1、實現(xiàn) Comparable接口

1)我們的類 實現(xiàn) Comparable接口,重寫 compareTo方法來實現(xiàn)升序和降序。

注意:關(guān)于升序和降序,簡單的改一下 compareTo方法的比較符號即可。

@Data
@ToString
public class User implements Comparable<User> {

    private Long id;

    private String userName;

    private int age;

    public User(Long id, String userName, int age) {
        this.id = id;
        this.userName = userName;
        this.age = age;
    }

    /**
     * 按照age進行排序
     * 如果傳參 age比本身的 age小的話,返回1,升序
     * 如果傳參 age比本身的 age大的話,返回-1,降序
     *
     * @param o
     * @return
     */
    @Override
    public int compareTo(User o) {
        if (this.getAge() > o.getAge()) {
            return 1;
        } else if (this.getAge() == o.getAge()) {
            return 0;
        } else {
            return -1;
        }
    }
}   

2)業(yè)務(wù)中通過調(diào)用 Collections.sort(List list);方法集合完成排序。

    public static void main(String[] args) {
        sortAge();
    }

    private static void sortAge() {
        List<User> userList = new ArrayList<User>();
        userList.add(new User(1L, "趙云", 20));
        userList.add(new User(2L, "趙子龍", 19));
        userList.add(new User(3L, "安琪拉", 18));
        userList.add(new User(4L, "露娜", 17));
        userList.add(new User(5L, "妲己", 19));
        userList.add(new User(6L, "重量", 16));
        userList.add(new User(7L, "重慶", 21));
        System.out.println("排序之前:");
        for (User user : userList) {
            System.out.println(user);
        }
        Collections.sort(userList);
        System.out.println("排序之后:");
        for (User user : userList) {
            System.out.println(user);
        }
    }

在這里插入圖片描述

2、實現(xiàn) Comparator接口

1)我們的類 實現(xiàn) Comparator接口,重寫 compare方法來實現(xiàn)升序和降序。

@Data
@ToString
public class User2 {

    private Long id;

    private String userName;

    private int age;
}

public class UserNameSort implements Comparator<User2> {

    @Override
    public int compare(User2 o1, User2 o2) {
        return o1.getUserName().compareTo(o2.getUserName());
    }
}

2)業(yè)務(wù)中通過調(diào)用 Collections.sort(List list, Comparator<? super T> c);方法集合完成排序。

注意:1)可以不用寫,我們通過定義它們的匿名內(nèi)部類來實現(xiàn)排序。

    public static void main(String[] args) {
        sortUserName();
    }

    private static void sortUserName() {
        List<User2> userList = new ArrayList<User2>();
        userList.add(new User2(1L, "趙云", 20));
        userList.add(new User2(2L, "趙子龍", 19));
        userList.add(new User2(3L, "安琪拉", 18));
        userList.add(new User2(4L, "露娜", 17));
        userList.add(new User2(5L, "妲己", 19));
        userList.add(new User2(6L, "重量", 16));
        userList.add(new User2(7L, "重慶", 21));
        System.out.println("排序之前:");
        for (User2 user : userList) {
            System.out.println(user);
        }

        HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
        Collections.sort(userList, new UserNameSort());
        System.out.println("排序之后:");
        for (User2 user : userList) {
            System.out.println(user);
        }
    }

在這里插入圖片描述


發(fā)現(xiàn)中文排序是不對的。因為漢字在Unicode中編碼和漢字GB2312編碼或者拼音是不一樣。

二、中文排序

下面直接使用 Comparator接口的匿名內(nèi)部類來實現(xiàn)排序。

Java 提供了一個Collator.getInstance(java.util.Locale.CHINA);通過它可以簡單實現(xiàn)中文排序。

注意:漢字博大精深,對于多音字等,它的排序是不精準(zhǔn)的。

   private static void sortUserName2() {
        List<User2> userList = new ArrayList<User2>();
        userList.add(new User2(1L, "趙云", 20));
        userList.add(new User2(2L, "趙子龍", 19));
        userList.add(new User2(3L, "安琪拉", 18));
        userList.add(new User2(4L, "露娜", 17));
        userList.add(new User2(5L, "妲己", 19));
        userList.add(new User2(6L, "重量", 16));
        userList.add(new User2(7L, "重慶", 21));
        System.out.println("排序之前:");
        for (User2 user : userList) {
            System.out.println(user);
        }

        HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
        Collections.sort(userList, new Comparator<User2>() {
            @Override
            public int compare(User2 o1, User2 o2) {
                Comparator<Object> compare = Collator.getInstance(java.util.Locale.CHINA);
                return compare.compare(o1.getUserName(), o2.getUserName());
            }
        });
        System.out.println("排序之后:");
        for (User2 user : userList) {
            System.out.println(user);
        }
    }

在這里插入圖片描述

三、中文多音字排序

pinyin4j 是一個流行的 Java 庫,支持漢字和最流行的拼音系統(tǒng)之間的轉(zhuǎn)換。拼音的輸出格式也可以自定義。

pinyin4j的主頁:http://pinyin4j.sourceforge.net/

  • 支持簡體中文和繁體中文字符;
  • 支持轉(zhuǎn)換到漢語拼音,通用拼音等;
  • 支持多音字,即可以獲取一個中文字符的多種發(fā)音;
  • 支持多種字符串輸出格式。

1)引入依賴

        <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.1</version>
        </dependency>

2)中文拼音排序

   private static void sortUserName3() {
        List<User2> userList = new ArrayList<User2>();
        userList.add(new User2(1L, "趙云", 20));
        userList.add(new User2(2L, "趙子龍", 19));
        userList.add(new User2(3L, "安琪拉", 18));
        userList.add(new User2(4L, "露娜", 17));
        userList.add(new User2(5L, "妲己", 19));
        userList.add(new User2(6L, "重量", 16));
        userList.add(new User2(7L, "重慶", 21));
        System.out.println("排序之前:");
        for (User2 user : userList) {
            System.out.println(user);
        }

        HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
        Collections.sort(userList, new Comparator<User2>() {
            @Override
            public int compare(User2 o1, User2 o2) {
                String pinyin1 = null;
                String pinyin2 = null;
                try {
                    pinyin1 = PinyinHelper.toHanYuPinyinString(o1.getUserName(), pinyinOutputFormat, " ", true);
                    pinyin2 = PinyinHelper.toHanYuPinyinString(o2.getUserName(), pinyinOutputFormat, " ", true);
                    System.out.println("pinyin1=" + pinyin1 + ", pinyin2=" + pinyin2);
                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
                    badHanyuPinyinOutputFormatCombination.printStackTrace();
                }
                return pinyin1.compareTo(pinyin2);
            }
        });
        System.out.println("排序之后:");
        for (User2 user : userList) {
            System.out.println(user);
        }
    }

在這里插入圖片描述

針對 PinyinHelper.toHanYuPinyinString()獲取拼音的方法,自己可封裝成 工具類。

到此這篇關(guān)于Java對中文進行排序的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)Java 中文排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud中Eureka開啟密碼認(rèn)證的實例

    Spring Cloud中Eureka開啟密碼認(rèn)證的實例

    這篇文章主要介紹了Spring Cloud中Eureka開啟密碼認(rèn)證的實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 解決IDEA右鍵沒有創(chuàng)建新的package選項的情況

    解決IDEA右鍵沒有創(chuàng)建新的package選項的情況

    這篇文章主要介紹了解決IDEA右鍵沒有創(chuàng)建新的package選項的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java中文傳值亂碼問題的解決方法

    java中文傳值亂碼問題的解決方法

    這篇文章主要為大家詳細(xì)介紹了java中文傳值亂碼問題的解決方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java虛擬機堆內(nèi)存溢出的原因和解決方法

    Java虛擬機堆內(nèi)存溢出的原因和解決方法

    在Java開發(fā)中,內(nèi)存溢出(OutOfMemoryError)是一個常見的問題,尤其是在處理大量數(shù)據(jù)或長時間運行的應(yīng)用時,本文將通過一個簡單的示例,展示如何通過JVM參數(shù)和代碼分析來理解和解決內(nèi)存溢出問題,需要的朋友可以參考下
    2024-10-10
  • 詳解Java 序列化與反序列化(Serialization)

    詳解Java 序列化與反序列化(Serialization)

    這篇文章主要介紹了Java 序列化與反序列化(Serialization),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí) 吧
    2019-03-03
  • IntelliJ?IDEA中初始化Java類的常用快捷方法詳解

    IntelliJ?IDEA中初始化Java類的常用快捷方法詳解

    這篇文章主要為大家詳細(xì)介紹了IntelliJ?IDEA中初始化Java類并設(shè)置所有屬性的常用快捷方法,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2026-02-02
  • Spring Boot快速入門教程

    Spring Boot快速入門教程

    本篇文章主要介紹了Spring Boot快速入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 簡單探索 Java 中的惰性計算

    簡單探索 Java 中的惰性計算

    這篇文章主要介紹了簡單探索 Java 中的惰性計算,惰性計算(盡可能延遲表達式求值)是許多函數(shù)式編程語言的特性。惰性集合在需要時提供其元素,無需預(yù)先計算它們,這帶來了一些好處。,需要的朋友可以參考下
    2019-06-06
  • Nacos快速安裝部署教程

    Nacos快速安裝部署教程

    文章簡要介紹Nacos作為阿里巴巴開源的微服務(wù)管理組件,涵蓋其核心功能及單機模式部署步驟:下載穩(wěn)定版、配置MySQL、執(zhí)行數(shù)據(jù)庫腳本、啟動服務(wù)并查看日志,最后通過指定地址和賬號登錄控制臺
    2025-07-07
  • 如何用idea數(shù)據(jù)庫編寫快遞e站

    如何用idea數(shù)據(jù)庫編寫快遞e站

    這篇文章主要介紹了如何用idea數(shù)據(jù)庫編寫快遞e站,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論

楚雄市| 华安县| 德州市| 岳阳市| 美姑县| 泸水县| 景泰县| 邓州市| 翁源县| 宁明县| 高要市| 巩义市| 抚州市| 阳西县| 将乐县| 桦甸市| 泽普县| 武定县| 双流县| 枣阳市| 康平县| 华宁县| 栖霞市| 广平县| 云阳县| 牡丹江市| 集贤县| 阿克| 确山县| 阿荣旗| 芦山县| 崇礼县| 曲松县| 双鸭山市| 留坝县| 汕尾市| 宣化县| 中江县| 东丰县| 年辖:市辖区| 华阴市|