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

2022-09-01 02:17:42

我有以下集合:

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;
}

现在我必须根据字段对集合进行排序,如何实现这一点?agentDtoListcustomerCount


答案 1

这是我的“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));

对于字符串数据类型(如注释中所示)

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

..它期望得到AgentSummaryDTO.getCustomerCount()


答案 2

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

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

这仅按整数字段进行比较,并且由于实现了 ,因此效果很好。IntegerComparable

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

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

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

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

推荐