java - 根据单独表中的统计数据对用户列表进行排序

标签 java sorting arraylist logic objectify

我有一个 friend 表,我可以在其中获取 userIds。我还有一个统计表,其中 KeyuserId

我想创建一个按统计表中的分数排序的好友高分(列表),对此列表进行排序的最佳方式是什么?

我可以像这样填写 friend 统计数据数组:

List<Player> friendsList = getFriends(playerID, limit);
List<Stats> stats = new ArrayList<Stats>();

        for(Player player: friendsList){
            stats.add(ofy().load().type(Stats.class).filter("player", player).first().now());
        }

现在我想对其进行排序并返回好友列表 (Player) + 按最高分数排序的 score

最佳答案

如果您为您的 friend 列表使用 HashMap 或使用 SQL 进行排序,则解决方案可以变得更加优雅。但我决定根据您提供的信息来回答,这样您就不必进行大量重构。我可以为您提供更多更优雅的解决方案,如果您想要的话,尽管询问。

问题的解决方案

class Main{

    public static void main(String[] args) {

        List<Player> friendsList = new ArrayList<Player>();
        friendsList.add(new Player(1));
        friendsList.add(new Player(2));
        friendsList.add(new Player(3));

        List<Stats> stats = new ArrayList<Stats>();
        stats.add(new Stats(1,100));
        stats.add(new Stats(2, 300));
        stats.add(new Stats(3,200));

        Collections.sort(stats, 
                (Stats s1, Stats s2)->s1.getScore().compareTo(s2.getScore())
                );

        List<Player> highscore = new ArrayList<Player>();
        for(Stats s : stats){
            for(int i = 0; i < stats.size(); i++){
                if(friendsList.get(i).id == s.getUserId()){
                    highscore.add(friendsList.get(i));
                }
            }
        }

        Collections.reverse(highscore);

        for(Player p : highscore){
            System.out.println(p.getId());
        }

    }
}

输出:

2
3
1

用于测试目的的附加类:

class Player{
    Integer id;
    Player(Integer id){
        this.id = id;
    }
    Integer getId(){
        return id;
    }
}

class Stats{
    Integer userId;
    Integer score;
    Stats(Integer userId, Integer score){
        this.userId = userId;
        this.score = score;
    }
    Integer getScore(){
        return score;
    }
    Integer getUserId(){
        return userId;
    }
}

关于java - 根据单独表中的统计数据对用户列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43115640/

相关文章:

java - 如何设置/获取二维数组列表中的值?

java - 如何解决 Spring UnsatisfiedDependencyException 错误?

java - Android ActionBar 找不到资源

java - java 将字符串转换为日期时间

C++类双排序(?)

mysql - 根据 MySQL 数据库中国家/语言特定的排序规则按名称对客户进行排序

java - 如何查找由字符串指定的花色的所有牌,例如java中的 "Spades"

java - 如何将SIGINT传递给用java创建的进程?

php - 相关模型中的 yii2 排序

android clear arraylist 或适配器?