如何订购具有特定类属性的arraylist asc?

时间:2015-05-25 20:19:21

标签: java arraylist

我有一个带有我的班级档案(姓名和评级)的ArrayList,我需要在我的Arraylist中为这个信息订购asc属性。

例如:

  • 姓名:约翰评级:50
  • 姓名:Michel评分:30
  • 姓名:Petter评分:55
  • 姓名:Christian评分:78
  • 姓名:Seba评级:60

我需要这个:

  • 姓名:约翰米歇尔:30
  • 姓名:约翰评级:50
  • 姓名:Petter评分:55
  • 姓名:Seba评级:60
  • 姓名:Christian评分:78

最后我想得到最好的评分:

  • 姓名:Christian评分:78

我的班级资料:

public class Profile {
    private String name;
    private int rated;

    public Profile(String name,int rated) {
        this.name=name;
        this.rated=rated;

        }

    public String getName(){
        return name;
    }
    public int getrated(){
        return rated;

    }


}

我正在尝试这个,它不起作用:

ArrayList<Profile> aLprofile=new ArrayList<Profile>();
    aLprofile.sort(aLprofile.get(0).getrated());

你有另一种方式或任何提示给我。

2 个答案:

答案 0 :(得分:2)

您需要将比较器传递给sort方法。因此,请使用Comparator.comparingInt提供您要将Profile个实例与。

进行比较的逻辑

所以在你的情况下:

comparingInt(p1 -> p1.getRated());

可以用方法参考替换:

aLprofile.sort(comparingInt(Profile::getRated));

<小时/> 但是,如果您只想获得最大值,则无需排序,您可以使用Collections.max

Profile p = Collections.max(aLprofile, comparingInt(Profile::getRated));

答案 1 :(得分:1)

您的班级应该实施Comparable界面,然后使用Collections.sort

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

public class Profile implements Comparable<Profile> {
    private String name;
    private int rated;

    public Profile(String name,int rated) {
        this.name = name;
        this.rated = rated;
    }

    public String getName(){
        return name;
    }

    public int getrated(){
        return rated;
    }

    @Override
    public int compareTo(Profile other) {
        return (getrated() - other.getrated());
    }

    public static void main(String[] args) {
        List<Profile> aLprofile = new ArrayList<Profile>();

        aLprofile.add(new Profile("A", 10));
        aLprofile.add(new Profile("B", 8));
        aLprofile.add(new Profile("C", 12));
        aLprofile.add(new Profile("D", 14));
        aLprofile.add(new Profile("E", 6));

        Collections.sort(aLprofile);
        for(Profile p: aLprofile)
            System.out.println(p.getName());
    }
}