java 集合自定义排序

java 集合自定义排序

代码

package per.jwy.test;


/**
 * @author jwy
 * @since 2019/5/27 10:32
 */
public class User{
    private String name;
    private Integer age;
    private String  sex;

    public User() {
    }

    public User(String name, Integer age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}

package per.jwy.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author jwy
 * @since 2019/5/27 10:34
 */
public class MainTest {
    public static void main(String[] args){
        test1();
    }
    public static void test1(){
        User user1 = new User("maria",23,"2");
        User user2 = new User("jane",24,"2");
        User user3 = new User("kangkang",18,"1");


        List<User> userList = new ArrayList<User>();
        userList.add(user3);
        userList.add(user1);
        userList.add(user2);
        System.out.println("排序前==================");
        System.out.println(userList);
        Collections.sort(userList, new Comparator<User>() {
            public int compare(User o1, User o2) {
                if("2".equals(o1.getSex())){
                    return -1;
                }
                return 1;
            }
        });
        System.out.println("排序后==================");
        System.out.println(userList);
    }
}

输出结果

排序前==================
[User{name=‘kangkang’, age=18, sex=‘1’}, User{name=‘maria’, age=23, sex=‘2’}, User{name=‘jane’, age=24, sex=‘2’}]
排序后==================
[User{name=‘jane’, age=24, sex=‘2’}, User{name=‘maria’, age=23, sex=‘2’}, User{name=‘kangkang’, age=18, sex=‘1’}]

排序前:sex:1,2,2
排序后:sex:2,2,1
分析:
排序前根据集合的添加顺序,排序后
将sex=="2"的往前排
主要代码:

Collections.sort(userList, new Comparator<User>() {
            /**
             * 返回值分为三种:1(或大于0),0,-1(或小于0)
             * 当返回1时,集合顺序插入,先插入o2,当返回0时集合顺序(或随机??)插入,先插入o2
             * 当返回-1时,集合倒叙插入,先插入o1
             * 此例目的:将sex等于2的先返回
             * 两种实现方式:
             * 1.当"2".equals(o1.getSex())时,说明要返回o1,即先插入o1,倒叙插入应返回-1;
             */
            public int compare(User o1, User o2) {
                if("2".equals(o1.getSex())){
                    return -1;
                }
                return 1;
            }
            //2.当"2".equals(o2.getSex())时,说明要返回o2,即先插入o2,正叙插入应返回1;
            /*public int compare(User o1, User o2) {
                if("2".equals(o2.getSex())){
                    return 1;
                }
                return -1;
            }*/
        });

第二种

package per.jwy.test;


/**
 * @author jwy
 * @since 2019/5/27 10:32
 */
public class User implements Comparable{
    private String name;
    private Integer age;
    private String  sex;

    public User() {
    }

    public User(String name, Integer age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public int compareTo(Object o) {
        User user = (User)o;
        if("2".equals(user.sex)){
            return 1;
        }
        return -1;
    }
}

package per.jwy.test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * @author jwy
 * @since 2019/5/27 10:34
 */
public class MainTest {
    public static void main(String[] args){
        test1();
    }
    public static void test1(){
        User user1 = new User("maria",23,"2");
        User user2 = new User("jane",24,"2");
        User user3 = new User("kangkang",18,"1");


        List<User> userList = new ArrayList<User>();
        userList.add(user3);
        userList.add(user1);
        userList.add(user2);
        System.out.println("排序前==================");
        System.out.println(userList);
        Collections.sort(userList);
        System.out.println("排序后==================");
        System.out.println(userList);
    }
}

输出结果:

排序前==================
[User{name=‘kangkang’, age=18, sex=‘1’}, User{name=‘maria’, age=23, sex=‘2’}, User{name=‘jane’, age=24, sex=‘2’}]
排序后==================
[User{name=‘maria’, age=23, sex=‘2’}, User{name=‘jane’, age=24, sex=‘2’}, User{name=‘kangkang’, age=18, sex=‘1’}]

主要代码:

public int compareTo(Object o) {
        User user = (User)o;
        /**
         * 目的:将sex=2的user首先返回,
         * 实现1:如果返回1,则顺序插入,即先插入o,
         * 则另"2".equals(user.sex),先插入user,则返回1
         */
        if("2".equals(user.sex)){
            return 1;
        }
        return -1;
        /**
         * 实现2:如果返回1,则顺序插入,即先插入o,
         * 则另"2".equals(this.sex),先插入this,则返回-1
         */
        /*if("2".equals(this.sex)){
            return -1;
        }
        return 1;*/
    }
Java集合自定义排序可以使用 Comparator 或 Comparable 接口来实现。 如果使用 Comparator 接口,你可以创建一个实现了 Comparator 接口的类,并重 compare 方法来定义排序规则。然后通过 Collections.sort 方法使用自定义的 Comparator 对象来对集合进行排序。例如,在引用中的示例中,我们创建了一个 Mycomparator 类来按照 Person 对象的年龄进行排序,并将其传递给 Collections.sort 方法来排序 ArrayList。 如果使用 Comparable 接口,你可以在对象类中实现 Comparable 接口,并重 compareTo 方法来定义排序规则。然后通过 Collections.sort 方法来对集合进行排序。例如,在引用中的示例中,我们在 Person 类中实现了 Comparable 接口,并重了 compareTo 方法来按照年龄从大到小进行排序。 另外,在 JDK 8 之后,还可以使用 Stream 流来实现排序功能。你可以使用 sorted 方法和 Comparator.comparing 方法来对集合进行排序。例如,在引用中的示例中,我们使用 Stream 排序对包含 Person 对象的 List 进行排序。 以上是几种常见的自定义排序方法,你可以根据具体需求选择适合的方法来实现自定义排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Java集合框架实现自定义排序](https://blog.csdn.net/weixin_34066347/article/details/86114722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Java 中 List 排序的 3 种方法](https://blog.csdn.net/weixin_64061088/article/details/128668010)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值