我有一个方法,它将一个Employee对象的Vector作为输入:
static void transformData(Vector<Employee> employees){
employees.stream().sorted((Employee employee1, Employee employee2) -> (employee1.getEmpCode().compareTo(employee2.getEmpCode()) & employee1.getFromDate().compareTo(employee2.getFromDate())) );
}
我使用预先填充了一些对象(无序)的Vector调用此函数。它工作正常,对流的底层Vector进行排序。
但是,在调用此方法之前,如果我在该Vector中添加了一些元素,则新元素将添加到最后&amp;根据empCode的字母顺序,不是我期望的那样:
employees.add(new EmployeeTimeLog("MMX12", fromDate, toDate, 2));
// New Employee gets added in the end, fine.
transformData(employees);
// Now the Vector is sorted, however, the new element is still positioned in the end.
有人能指出我可能出错的地方吗?
答案 0 :(得分:0)
import java.util.List;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.stream.Collectors;
class TestPgm {
public static void main(String[] args) throws Exception {
List<Employee> employees = new ArrayList<Employee>();
employees.add(new Employee("AA12","A","A"));
employees.add(new Employee("CC12","C","C"));
employees.add(new Employee("KK12","K","K"));
employees.add(new Employee("BB12","B","B"));
employees = transformData(employees);
employees.forEach(e -> System.out.println("Id:"+ e.getEmpCode()));
System.out.println("Adding another employee");
employees.add(new Employee("II12", "I", "I"));
employees = transformData(employees);
employees.forEach(e -> System.out.println("Id:"+ e.getEmpCode()));
}
static List<Employee> transformData(List<Employee> employees){
List employeeList = employees.stream().sorted(Comparator.comparing(Employee::getEmpCode)).collect(Collectors.toList());
return employeeList;
}
}
这将给出输出:
Id:AA12
Id:BB12
Id:CC12
Id:KK12
Adding another employee
Id:AA12
Id:BB12
Id:CC12
Id:II12
Id:KK12
注意,您拥有结果流并将其收集到一个集合中。