对包含自定义类的列表进行排序 [英] Sort a list that contains a custom class

查看:37
本文介绍了对包含自定义类的列表进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我目前正在为大学做一个练习,它有几个可选部分(因为我们还没有在课堂上做过),其中之一是使用列表而不是数组(所以它是可变大小的)另一个打印按点排序的列表(我现在就讲)

so I'm currently doing an exercise for college that has several optional parts (because we havn't done this in class yet), one of them being to use lists instead of arrays (so it'd be variable size) and another one printing the list sorted by points (I'll get to that now)

所以,我有看起来像这样的 Player.java 类.

So, I have the Player.java class which looks like this.

public class Player {
    String name;
    String password;
    int chips;
    int points;

    public Player(String n, String pw, int c, int p) {
        name = n;
        password = pw;
        chips = c;
        points = p;
    }

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }

    public void setPW(String pw) {
        password = pw;
    }

    public String getPW() {
        return password;
    }

    public void setChips(int c) {
        chips = c;
    }

    public int getChips() {
        return chips;
    }

    public void setPoints(int p) {
        points = p;
    }

    public int getPoints() {
        return points;
    }
}

很简单,然后我用这个(在另一个类中)创建一个列表:

Pretty simple, then I'm creating a List with this (in another class):

List<Player> lplayer = new ArrayList<Player>(); 

使用此添加玩家:

lplayer.add(new Player(n,pw,c,p))`

最后用这个读取他们的统计数据:

And finally reading their stats with this:

public int search_Player (String n) {
    String name;
    int i = 0;
    boolean found = false;
    while ((i <= tp) && (!found)) {
        name = lplayer.get(i).getName();
        if (name.equals(n)) {
            found = true;
        }
        i++;
    }
    return (found == true) ? i-1 : -1;
}
public Player show_Player (int i) {
    return lplayer.get(i);
}
public void list_Players() {
    Collections.sort(lplayer);
    int i2;
    if (tp > 0) { // variable which contains number of total players
        for (int i = 0;i<tp;i++) {
            i2 = i+1;
            System.out.println ("\n"+i2+". "+lplayer.get(i).getName()+" [CHIPS: "+lplayer.get(i).getChips()+" - POINTS: "+lplayer.get(i).getPoints()+"]");
        }
    }
    else {
        System.out.println ("There are no players yet.");
    }
}

这就是基本上所有的代码.正如你所看到的,我已经有一个 list_Players 函数,但它只是按照添加的顺序打印它.我需要一种方法来按每个玩家的积分排序(所以基本上是排名).

So that's basically all the code. As you can see the I already have a list_Players function but that just prints it in the order it was added. I need a way to print in sorted by the points each player has (so basically a ranking).

如您所见,我对 Java 还很陌生,所以请尽量不要想出非常复杂的方法.

As you can see I'm pretty new to java so please try not to come up with a very complicated way of doing it.

我已经搜索过它并找到了 Collections.sort(list) 之类的东西,但我想这不是我在这里需要的.

I've already searched for it and found things like Collections.sort(list) but I guess that's not what I need right here.

谢谢!

推荐答案

您可以使用 public static void sort(List<T> list, Comparator<? super T> c) Collections 重载 - 提供你需要的比较器(可以只是一个匿名类) - 你就是设置!

You can use the public static <T> void sort(List<T> list, Comparator<? super T> c) overload in Collections - provide the comparator you need (can be just an anonymous class) - and you are all set!

编辑: 描述了该方法的工作原理.简而言之,您将调用实现为

EDIT: This describes how the method works. In brief, you'll implement your call as

Collections.sort(list, new Comparator<Player>() {
    int compare(Player left, Player right)  {
        return left.getPoints() - right.getPoints(); // The order depends on the direction of sorting.
    }
});

就是这样!

这篇关于对包含自定义类的列表进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆