JAVA使用Comparator根据list对象的属性进行排序 冒泡排序

本文介绍了如何在Java中利用Comparator接口对List对象的特定属性进行排序,以冒泡排序为例,详细阐述了排序过程和实现步骤。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author cenguocheng 137544496@qq.com
 * @date 2019/10/11 13:55
 */
public class TestSort implements Comparator<Persion> {

    @Override
    public int compare(Persion o1, Persion o2) {
        int seq1 = 0;
        int seq2 = 0;
        try {
            seq1 = o1.getSort();
            seq2 = o2.getSort();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return seq1 - seq2;
    }

    public static void main(String[] args) {
        List<Persion> testSorts = new ArrayList<Persion>();
        for (int i = 0; i < 10; i++) {
            int sort = (int)(Math.random()*100);
            testSorts.add(new Persion("JACK:"+sort,sort));
            System.out.println("JACK:"+sort+" > "+sort);
        }

        System.out.println("---------------排序后---------------");

        Collections.sort(testSorts, new TestSort());

        for (Persion testSort:testSorts) {
            System.out.println("sort: "+testSort.getName()+" > "+testSort.getSort());
        }
    }

}

class Persion{

    public Persion() { }

    public Persion(String name, int sort) {
        this.name = name;
        this.sort = sort;
    }

    public String name;
    public int sort;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getSort() {
        return sort;
    }

    public void setSort(int sort) {
        this.sort = sort;
    }
}

 

Java 中,对 `List` 集合对象根据某个字段进行排序有多种方法,以下为你详细介绍: ### 使用 Stream API 排序 这种方式利用 Stream API 中的 `sorted()` 方法,通过 `Comparator.comparing()` 指定排序的字段,再使用 `collect()` 方法将排序后的元素收集到一个新的列表中。示例代码如下: ```java import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; class Person { private int age; public Person(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class ListSorting { public static List<Person> stream(List<Person> list) { list = list.stream() .sorted(Comparator.comparing(Person::getAge)) .collect(Collectors.toList()); return list; } public static void main(String[] args) { List<Person> personList = new ArrayList<>(); personList.add(new Person(25)); personList.add(new Person(20)); personList.add(new Person(30)); List<Person> sortedList = stream(personList); for (Person person : sortedList) { System.out.println(person.getAge()); } } } ``` 上述代码通过 `stream` 方法对 `Person` 列表根据 `age` 字段进行升序排序[^1]。 ### 使用冒泡排序 冒泡排序是一种简单的排序算法,通过多次比较和交换元素的位置来实现排序。示例代码如下: ```java import java.util.ArrayList; import java.util.List; class Person { private int age; public Person(int age) { this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class ListSorting { public static void buubleSort(List<Person> list) { for (int i = 0; i < list.size(); i++) { for (int j = 0; j < list.size() - 1; j++) { if (list.get(j).getAge() > list.get(j + 1).getAge()) { Person temp = list.get(j); list.set(j, list.get(j + 1)); list.set(j + 1, temp); } } } } public static void main(String[] args) { List<Person> personList = new ArrayList<>(); personList.add(new Person(25)); personList.add(new Person(20)); personList.add(new Person(30)); buubleSort(personList); for (Person person : personList) { System.out.println(person.getAge()); } } } ``` 上述代码通过 `buubleSort` 方法对 `Person` 列表根据 `age` 字段进行升序排序[^1]。 ### 多字段排序 若要对列表先按照 `age` 降序再按照 `height` 降序排列,可以使用如下代码: ```java import java.util.ArrayList; import java.util.Comparator; import java.util.List; class People { private int age; private int height; public People(int age, int height) { this.age = age; this.height = height; } public int getAge() { return age; } public int getHeight() { return height; } } public class MultiFieldSorting { public static void main(String[] args) { List<People> list = new ArrayList<>(); list.add(new People(25, 170)); list.add(new People(20, 165)); list.add(new People(30, 180)); List<People> data = list.stream().sorted(Comparator.comparing(People::getAge).thenComparing(People::getHeight).reversed()).toList(); for (People people : data) { System.out.println("Age: " + people.getAge() + ", Height: " + people.getHeight()); } } } ``` 上述代码通过 `stream` 方法对 `People` 列表先按照 `age` 降序再按照 `height` 降序排列[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值