Java 使用流或集合对对象内的列表进行排序
我们有一个场景,需要根据companyName对项目对象进行排序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 ;
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));