成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

全面解析 Java Comparator:一步步掌握排序技巧!

開發 前端
我們展示了如何使用 Java Comparator 實現定制化排序,并在 Spring Boot 項目中將排序功能集成到前后端,最終呈現了一個可交互的人員列表。希望本文能夠幫助你深入理解 Comparator 的用法!

排序是編程中最基礎且常見的需求之一。在 Java 中,Comparator 接口是實現定制化排序的強大工具。本文將通過代碼示例深入講解 Comparator 的用法,并結合一個實際的 Spring Boot 項目展示如何在前后端實現排序功能。

Comparator 接口詳細介紹

Comparator 是 Java 中用于定義對象排序規則的接口。它位于 java.util 包中,常用于對集合或數組中的對象進行排序。與 Comparable 接口相比,Comparator 更靈活,它允許我們為不同的排序需求定義多個比較器。

  • 核心方法

返回負數:o1 小于 o2。

返回零:o1 等于 o2。

返回正數:o1 大于 o2。

  • int compare(T o1, T o2)定義兩個對象的比較邏輯。
  • boolean equals(Object obj)(默認實現):用于比較當前 Comparator 與另一個對象是否相等。
  • 常見用法

.匿名內部類直接實現接口并定義排序邏輯。

a.Lambda 表達式在 Java 8 之后,更簡潔地實現比較邏輯。

b.方法引用使用已有的方法簡化代碼。

c.Comparator 的引入極大地提高了排序的靈活性,適用于需要多條件或動態排序的場景。

項目配置

pom.xml 配置

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Boot Thymeleaf -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- Spring Boot DevTools -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>

    <!-- Spring Boot Configuration Processor -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

application.yaml 配置

custom:
  sorting:
    criteria:
      - name
      - age
      - city

讀取配置類

package com.icoderoad.config;


import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;


import java.util.List;


@Data
@Configuration
@ConfigurationProperties(prefix = "custom.sorting")
public class SortingConfig {
    private List<String> criteria;
}

核心代碼

實體類

package com.icoderoad.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private String name;
    private int age;
    private String city;
}

Comparator 實現

package com.icoderoad.util;


import com.icoderoad.entity.Person;


import java.util.Comparator;


public class PersonComparator {
    public static Comparator<Person> byName() {
        return Comparator.comparing(Person::getName);
    }


    public static Comparator<Person> byAge() {
        return Comparator.comparingInt(Person::getAge);
    }


    public static Comparator<Person> byCity() {
        return Comparator.comparing(Person::getCity);
    }
}

服務層

package com.icoderoad.service;


import com.icoderoad.config.SortingConfig;
import com.icoderoad.entity.Person;
import com.icoderoad.util.PersonComparator;
import org.springframework.stereotype.Service;


import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;


@Service
public class PersonService {


    private final SortingConfig sortingConfig;


    public PersonService(SortingConfig sortingConfig) {
        this.sortingConfig = sortingConfig;
    }


    public List<Person> sortPersons(List<Person> persons, String criteria) {
        Comparator<Person> comparator;
        switch (criteria) {
            case "age":
                comparator = PersonComparator.byAge();
                break;
            case "city":
                comparator = PersonComparator.byCity();
                break;
            case "name":
            default:
                comparator = PersonComparator.byName();
                break;
        }
        return persons.stream().sorted(comparator).collect(Collectors.toList());
    }
}

控制器層

package com.icoderoad.controller;


import com.icoderoad.entity.Person;
import com.icoderoad.service.PersonService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;


import java.util.Arrays;
import java.util.List;


@Controller
public class PersonController {


    private final PersonService personService;


    public PersonController(PersonService personService) {
        this.personService = personService;
    }


    @GetMapping("/persons")
    public String getPersons(@RequestParam(defaultValue = "name") String criteria, Model model) {
        List<Person> persons = Arrays.asList(
            new Person("Alice", 30, "New York"),
            new Person("Bob", 25, "San Francisco"),
            new Person("Charlie", 35, "Chicago")
        );
        model.addAttribute("persons", personService.sortPersons(persons, criteria));
        model.addAttribute("criteria", criteria);
        return "persons";
    }
}

前端實現

persons.html 模板

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Person List</title>
    <link rel="stylesheet" >
</head>
<body>
<div class="container mt-5">
    <h1>人員列表</h1>
    <form method="get" action="/persons">
        <select name="criteria" class="form-select" onchange="this.form.submit()">
            <option value="name" th:selected="${criteria == 'name'}">按姓名排序</option>
            <option value="age" th:selected="${criteria == 'age'}">按年齡排序</option>
            <option value="city" th:selected="${criteria == 'city'}">按城市排序</option>
        </select>
    </form>
    <table class="table table-striped mt-3">
        <thead>
        <tr>
            <th>姓名</th>
            <th>年齡</th>
            <th>城市</th>
        </tr>
        </thead>
        <tbody>
        <tr th:each="person : ${persons}">
            <td th:text="${person.name}"></td>
            <td th:text="${person.age}"></td>
            <td th:text="${person.city}"></td>
        </tr>
        </tbody>
    </table>
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

通過以上代碼,我們展示了如何使用 Java Comparator 實現定制化排序,并在 Spring Boot 項目中將排序功能集成到前后端,最終呈現了一個可交互的人員列表。希望本文能夠幫助你深入理解 Comparator 的用法!


責任編輯:武曉燕 來源: 路條編程
相關推薦

2017-01-19 21:08:33

iOS路由構建

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅動

2018-12-24 10:04:06

Docker存儲驅動

2010-03-04 16:28:17

Android核心代碼

2016-11-02 18:54:01

javascript

2017-12-25 11:50:57

LinuxArch Linux

2010-04-07 13:05:57

2020-12-24 11:19:55

JavaMapHashMap

2011-05-10 10:28:55

2024-08-30 08:30:29

CPU操作系統寄存器

2024-09-30 09:56:59

2009-08-14 11:35:01

Scala Actor

2009-12-17 16:36:23

無線路由設置密碼

2018-04-23 14:23:12

2018-06-11 15:30:12

2017-01-06 15:13:25

LinuxVim源代碼

2018-07-13 15:36:52

2024-08-06 09:29:54

程序機器指令字符串

2019-04-01 10:15:02

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区视频 | 亚洲福利一区二区 | av永久| 四虎影院免费在线 | 久久中文字幕一区 | 国产激情一区二区三区 | 一级一片在线观看 | 亚洲精品永久免费 | 丁香五月网久久综合 | 国产精品久久久久久福利一牛影视 | 亚洲人成一区二区三区性色 | 国产精品高潮呻吟 | 欧美日韩在线播放 | 日韩成人精品视频 | 色综合色综合色综合 | 欧美亚洲在线 | 午夜a v电影| 亚洲一区二区三区在线 | 极情综合网 | 国产成人精品免高潮在线观看 | 国产精品久久一区二区三区 | 国产区视频在线观看 | 精品国产免费一区二区三区五区 | 久久99精品久久久久久狂牛 | 久久精品视频在线观看 | 在线播放中文字幕 | 视频在线观看亚洲 | 久久久成人动漫 | 免费黄色录像视频 | 91在线观看免费 | 一区二区三区回区在观看免费视频 | 国产高清精品一区二区三区 | 在线中文字幕视频 | 国产精品高清在线 | 99re在线视频| 日韩精品一区二区三区在线播放 | 99这里只有精品视频 | 欧美成人激情视频 | 欧美日韩在线一区二区三区 | 日日操夜夜干 | 欧美a在线|