【问题标题】:How to sort a List<> populated by java objects?如何对由 java 对象填充的 List<> 进行排序?
【发布时间】:2022-01-11 06:56:51
【问题描述】:

我有一个实体

@Entity
public class User{
@Id
private int id;
private int score;
....
}


List<User> userlist=repo.findAll();

从数据库中获取它后,我想按score 对其进行排序。我可以从数据库中排序,但在代码方面会有一些事情要做。

【问题讨论】:

    标签: java list spring-boot sorting


    【解决方案1】:
    Collections.sort(userlist, Comparator.comparingInt(User::getScore));
    

    userlist.sort(Comparator.comparing(User::getScore));
    

    【讨论】:

      【解决方案2】:

      对数据库进行排序更有效。为什么不使用这个功能?

      无论如何,要以编程方式对列表进行排序,您可以使用 java 流:

      List<User> userList=repo.findAll();
      
      List<User> sortedList = userList.stream().sorted((o1, o2) -> 
      {
          return Integer.compare(o1.getScore(), o2.getScore());
      }).collect(Collectors.toList());
      

      您将列表转换为流,然后使用比较器函数(其中的 lambda)来比较您想要的 User 对象中的任何内容。在这种情况下,得分。当比较器返回值 > 0 时,表示当前对象大于“下一个”对象。如果 value = 0 则它们相等,如果它

      这不是唯一的方法。它可以手动完成,通过Collections 类等等。

      【讨论】:

      • sorted 应该采用 Comparator 并且其方法 compare 不会返回 booleanint (&lt;0 if first 参数小于, 0 如果相等或 &gt;0 如果大于 second 参数 {没有 current/next 对象})
      • @user16320675 眼睛很好。谢谢!
      • 完成 :) 谢谢。
      【解决方案3】:

      您可以对存储库中的数据进行排序。它应该看起来像这样:

      interface UserRepository extends JpaRepository<User, Long> {
          List<User> findByOrderByScoreDesc();
      }
      

      这将自动为您生成查询。如果要更改排序顺序,也可以使用 Asc 代替 Desc。

      这比从代码排序要好,因为您也可以对这个列表进行分页,而无需从数据库中获取所有数据。

      您可以查看有关此here 的更多详细信息。

      【讨论】:

        【解决方案4】:

        在存储库中,您可以定义 findByOrderByScoreDesc() 或 findByOrderByScoreAsc() 方法以通过对分数值进行排序来获取结果。或者在获得结果后,您可以对 Collection 应用排序。如果您想使用 Pageable 来获取结果,那么在创建 Pageable 对象时您可以指定排序顺序和排序字段。

        【讨论】:

          猜你喜欢
          • 2013-07-03
          • 1970-01-01
          • 1970-01-01
          • 2017-11-02
          • 2019-06-17
          • 2012-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多