【发布时间】: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()));