对象数组根据多个属性排序

先整点咖啡豆
package rank;

public class Player {

    private Integer age;

    private Integer score;

    private String name;

    private String feature;

    public Integer getAge() {
        return age;
    }

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

    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }

    public String getName() {
        return name;
    }

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

    public String getFeature() {
        return feature;
    }

    public void setFeature(String feature) {
        this.feature = feature;
    }

    public Player(Integer age, Integer score, String name, String feature) {
        this.age = age;
        this.score = score;
        this.name = name;
        this.feature = feature;
    }

    @Override
    public String toString() {
        return "Player{" +
                "age=" + age +
                ", score=" + score +
                ", name=" + name +
                ", feature='" + feature + '\'' +
                '}';
    }
}

 

然后排序测试

package rank;

import java.util.ArrayList;
import java.util.List;

public class Test {

    public static void main(String[] args) {

        // 诸神归位
        Player p1 = new Player(15,70,"韦鲁斯","反向Q");
        Player p2 = new Player(16,4396,"李青","假装打野,趁机惩戒炮车");
        Player p3 = new Player(17,30,"琴女","RNobody");
        Player p4 = new Player(18,20,"杰斯","瓦尔基里俯冲,次元穿越TP");
        Player p5 = new Player(16,888,"薇恩","洗澡");

        // 构建全明星阵容
        List<Player> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);

        // 先亮相
        for (Player player : list) {
            System.out.println(player.toString());
        }

        // 对象数组,根据多个元素排序,核心思想利用Comparator接口,重写下compare方法,这里用Lambda写法
        list.sort((player1, player2) -> {
            // 排序优先级:先年龄,再评分,如要逆序的话,可以用reversed()方法
            if (player1.getAge() > player2.getAge()) {
                // 如果顺序则返回整数
                return 1;
            } else if (player1.getAge() < player2.getAge()) {
                // 反之返回负数
                return -1;
            } else {
                // 年龄相等就用第二个参数评分排序,多个参数依此类推,这里用两个参数排序
                return player1.getScore().compareTo(player2.getScore());
            }
        });

        // 诸神排位,再显神威
        System.out.println("LPL三连冠");
        for (Player player : list) {
            System.out.println(player.toString());
        }

    }
}

最终效果

Player{age=15, score=70, name=韦鲁斯, feature='反向Q'}
Player{age=16, score=4396, name=李青, feature='假装打野,趁机惩戒炮车'}
Player{age=17, score=30, name=琴女, feature='RNobody'}
Player{age=18, score=20, name=杰斯, feature='瓦尔基里俯冲,次元穿越TP'}
Player{age=16, score=888, name=薇恩, feature='洗澡'}
LPL三连冠
Player{age=15, score=70, name=韦鲁斯, feature='反向Q'}
Player{age=16, score=888, name=薇恩, feature='洗澡'}
Player{age=16, score=4396, name=李青, feature='假装打野,趁机惩戒炮车'}
Player{age=17, score=30, name=琴女, feature='RNobody'}
Player{age=18, score=20, name=杰斯, feature='瓦尔基里俯冲,次元穿越TP'}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值