【问题标题】:Sorting a list inside an object using stream or collection [closed]使用流或集合对对象内的列表进行排序[关闭]
【发布时间】:2019-02-03 00:49:45
【问题描述】:

我们有一个场景,我们必须根据 companyName 对 Project 对象进行排序。

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

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

class Company  {
    String companyName ;
    ....
    getter..
    setters..
}

最终结果应该是一份打印公司信息的报告,并将根据公司名称进行排序。我无法从 db 中获取列表,因为我无法更改需要在 Java 本身中执行的查询。

我尝试使用 Collection.Sort() 但无法对列表进行排序。报告未分类。我如何使用流或集合来做到这一点。无法分隔列表,因为该对象稍后使用。

我试过了。

 Collections.sort(deptObj.getProjectObj.getCompanyList(), Comparator.comparing(
            (Company c) -> c.getCompanyName()));

【问题讨论】:

  • 如果您无法使用 Collections.sort() 正确排序,.stream().sorted()... 也无济于事。
  • 你说的无法排序是什么意思?
  • 会不会是因为休眠不允许修改模型类对象?
  • 项目中是否有可能有很多公司的记录?还是 oneToOne 记录?
  • 如果您有“无效代码”,请提交minimal reproducible example。因此,请相应地编辑您的问题。避免将更多信息放入 cmets!

标签: java lambda collections stream


【解决方案1】:

应该这样做:

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

旧答案:

您可以在 Project 类本身中拥有方法。您可以调用它返回公司对象的排序列表。它使用 Java 8 的 streamsorted 方法进行排序,然后将 collect 返回到一个列表中。它使用 Comparator 根据限定符进行排序。这里的限定词是公司名称。

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

【讨论】:

  • 感谢您的回复....我不想将它分隔在一个列表中...可以在对象本身内部完成...就像 collection.sort() 一样
【解决方案2】:

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

如果数据是从数据库中提取的(根据您的评论),最好的选择是在查询中对用户数据库排序

如果你想在代码中做并且有 java 8

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

【讨论】:

  • 感谢您的回答,但列表中可能有很多记录无法从数据库中对其进行排序。
  • @Suyash 如果你有很多记录,那么你只需要在查询中添加 order by 然后数据库会为你排序
猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 2021-06-25
相关资源
最近更新 更多