Java 使用流或集合对对象内的列表进行排序

Java 使用流或集合对对象内的列表进行排序,java,lambda,collections,stream,Java,Lambda,Collections,Stream,我们有一个场景,需要根据companyName对项目对象进行排序 class Department { Project projectObj; .... getter.. setters.. } class Project { List<Company> companyList .... getter.. setters.. } class Company { String companyName ;

我们有一个场景,需要根据companyName对项目对象进行排序

class Department  {
    Project projectObj;
    ....
    getter..
    setters..
}

class Project {
    List<Company> companyList
    ....
    getter..
    setters..
}

class Company  {
    String companyName ;
    ....
    getter..
    setters..
}
这应该做到:

Collections.sort(deptObj.getProjectObj.getCompanyList(), String::compareToIgnoreCase);
旧答案:

您可以在项目类本身中使用方法。您可以调用它来返回公司对象的排序列表。它使用Java8的
stream
sorted
方法进行排序,然后
将其收集回列表中。它使用比较器根据限定符进行排序。这里是公司名称

public class Project {

    private List<Company> companyList;
    //... other fieldsand getters/setters

    public List<Company> getSortedCompanies(){
        return this.companyList.stream()
        .sorted((company1, company2) ->
        company1.companyName().compareTo(company2.companyName()))
        .collect(toList()));
    }
}
公共类项目{
私人上市公司名单;
//…其他场和接球手/接球手
公共列表getSortedCompanies(){
返回此.companyList.stream()
.已排序((公司1,公司2)->
company1.companyName().compareTo(company2.companyName())
.collect(toList());
}
}

如果项目中有很多公司的记录,那么很难做到,如果只有一个记录,我们就可以做到

若数据是从数据库中获取的(根据您的评论),那个么最好的选择是在查询中按用户数据库顺序进行

如果您想在代码中使用java 8

list.sort(Comparator.comparing(project  -> 
   (project.getCompanyList() != null && project.getCompanyList().size>0 )?project.getCompanyList().get(0): null));

如果您不能使用集合对其进行正确排序。sort()
也不会有帮助。不能排序是什么意思?这可能是因为hibernate不允许修改模型类对象?项目中可能有许多公司记录吗?或者是oneToOne记录?如果您有“非工作代码”,请张贴一个。因此,请相应地编辑您的问题。避免在评论中添加更多信息!谢谢你的回复。。。。我不想在列表中将其分开……这可以在对象本身内部完成吗……比如collection.sort()需要答案,但列表中可能有很多记录,无法从数据库中对其进行排序。@Suyash如果有很多记录,则只需在查询中添加order by,然后数据库将为您排序
list.sort(Comparator.comparing(project  -> 
   (project.getCompanyList() != null && project.getCompanyList().size>0 )?project.getCompanyList().get(0): null));