【问题标题】:Sort object list based on custom object as one of field [duplicate]基于自定义对象对对象列表进行排序作为字段之一[重复]
【发布时间】:2020-10-05 17:14:48
【问题描述】:
public class Employee {

private String name;
private String id;
private Address address;

public String getName() {
        return name;
    }

    public Employee setName(String name) {
        this.name = name;
        return this;
    }


    public String getId() {
        return id;
    }

    public Employee setId(String id) {
        this.id = id;
        return this;
    }


    public Address getAddress() {
        return address;
    }

    public Employee setName(Address address) {
        this.address = address;
        return this;
    }


}

public class Address{
    
    public String streetName;
    public String streetNumber;

public String getName() {
        return streetName;
    }

    public Address setStreetName(String streetName) {
        this.streetName = streetName;
        return this;
    }


    public String getId() {
        return id;
    }

    public Address setStreetNumber(String streetNumber) {
        this.streetNumber = streetNumber;
        return this;
    }

}

Employee 是上面定义的类之一,Address 是 Employee 字段之一的数据类型之一。列表需要根据 streetName 进行排序,address 是 Employee 字段的一部分。

这可以通过编写自定义比较器来完成。我正在寻找一种使用 java lambda 排序并获取排序列表的方法?

【问题讨论】:

  • Collections.sort(employees,Comparator.comparing(employee -> employee.getAddress().getStreetName()));
  • 到目前为止你有什么尝试?
  • 同类型问题可以查看此链接stackoverflow.com/a/58223132/9024680
  • 您的搜索结果是什么?也问,因为这个问题以前被问过和回答过。
  • 我一直在尝试使用枚举而不是 switch 和 case,这是需要根据字段进行排序的众多条件之一。我想要的方式不是在不同职位的帮助下工作。因此不得不提出问题。我写了类似的东西: BYSTREETNAME("bystreetname", (a, b) -> a.stream().sorted(Comparator.comparing((Function super Employee, ? extends String>) c -> c.getAddress() .getStreetName(), b.equalsIgnoreCase("ascending")? Comparator.naturalOrder(): Comparator.reverseOrder())).collect(Collectors.toList()));

标签: java java-8


【解决方案1】:

您可以创建如下比较器或@Hadi J 在评论中所做的方式:

Comparator<Employee> byStreetName = (emp1, emp2) -> emp1.getAddress().getName().compareTo(
                                                    emp2.getAddress().getName());

并像这样使用它:

myList.sort(byStreetName);

或者如果你正在使用流

myList.stream().sorted(byStreetName)...

【讨论】:

  • Comparator&lt;Employee&gt; byStreetName = Comparator.comparing(emp -&gt; emp.getAddress().getStreetName());
猜你喜欢
  • 2011-05-03
  • 2020-04-02
  • 2015-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多