【发布时间】:2018-10-03 04:18:50
【问题描述】:
我有一个场景可以根据时间戳对对象进行排序。类如下:
class Employee
{
private String name;
private List<Address> addresses;
//...
//Getters and setters for all fields
}
public class Address
{
private String city;
private Timestamp startDate;
private Timestamp endDate;
private String typeOfResidence;
//...
//Getters and setters for all the fields
}
对于员工,有两种可能性 1.它将有一个地址列表。 2.地址列表可以为空
地址类有一个字段typeOfResidence,它的值可以是Residence、Office、ForeignHome。
每个Employee 可以有地址列表,一个地址是住宅,另一个是办公室等等。可以有多个住宅地址,但只有一个办公地址。
我想根据 typeOfResidence=Office 的地址的 startDate 对员工列表进行排序。
我写了以下代码:
private void sortEmployeeListBasedOnStartDate(List<Employee> employeeList)
{
Comparator<Address> byTimeStamp = Comparator.comparing(
Address::getStarteDate,
(ts1, ts2) -> ts1.toGregorianCalendar().compareTo(ts2.toGregorianCalendar())
);
employeeList.stream()
.map(x -> getLatestAddressByType(x, "Office"))
.filter(y -> y!=null)
.sorted(byTimeStamp.reversed())
.collect(Collectors.toList());
}
public Address getLatestAddressByType(Employee employee, String type)
{
if(role != null && brokerageManagedProposalType != null)
{
return getUserAddress(employee).stream()
.filter(address-> address.getTypeOfResidence().equals(type))
.findFirst()
.orElse(null);
}
return null;
}
public List<Address> getUserAddress(Employee employee)
{
if (!NullChecker.isNull(employee) && !NullChecker.isNull(employee.getAddress()))
{
return employee.getAddress();
}
return Collections.emptyList();
}
不知何故,这似乎不起作用。员工没有排序。请帮我让它工作。
【问题讨论】:
标签: java sorting java-stream comparator