根据其中的一个字段对 Java 集合对象进行排序

新手上路,请多包涵

我有以下收藏:

 Collection<AgentSummaryDTO> agentDtoList = new ArrayList<AgentSummaryDTO>();

其中 AgentSummaryDTO 看起来像这样:

 public class AgentSummaryDTO implements Serializable {
    private Long id;
    private String agentName;
    private String agentCode;
    private String status;
    private Date createdDate;
    private Integer customerCount;
}

现在我必须根据 customerCount 字段对集合 agentDtoList 进行排序,如何实现?

原文由 skmaran.nr.iras 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 668
2 个回答

这是我的“1liner”:

 Collections.sort(agentDtoList, new Comparator<AgentSummaryDTO>(){
   public int compare(AgentSummaryDTO o1, AgentSummaryDTO o2){
      return o1.getCustomerCount() - o2.getCustomerCount();
   }
});

Java 8 的更新:对于 int 数据类型

 Collections.sort(agentDtoList, (o1, o2) -> o1.getCustomerCount() - o2.getCustomerCount());

甚至:

  Collections.sort(agentDtoList, Comparator.comparing(AgentSummaryDTO::getCustomerCount));

对于 String 数据类型(如评论中所示)

 Collections.sort(list, (o1, o2) -> (o1.getAgentName().compareTo(o2.getAgentName())));

..它期望吸气剂 AgentSummaryDTO.getCustomerCount()

原文由 Jiri Kremser 发布,翻译遵循 CC BY-SA 4.0 许可协议

Jiri Kremser 的回答 可以进一步简化,这确实是完整的 Java 8 方法:

 Collections.sort(agentDtoList, Comparator.comparing(AgentSummaryDTO::getCustomerCount));

这只是通过整数字段进行比较,并且效果很好,因为 Integer 实现 Comparable

一个更干净的解决方案可能是使用内置的 comparingInt() 方法:

 Collections.sort(agentDtoList, Comparator.comparingInt(AgentSummaryDTO::getCustomerCount));

当然,这可以通过静态导入 sortcomparingInt 来表达得更短:

 sort(agentDtoList, comparingInt(AgentSummaryDTO::getCustomerCount));

原文由 Magnilex 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题