Stream sorted()方法不反映Vector中新添加元素的排序顺序

时间:2017-12-15 13:02:11

标签: sorting vector java-stream

我有一个方法,它将一个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.

有人能指出我可能出错的地方吗?

1 个答案:

答案 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

注意,您拥有结果流并将其收集到一个集合中。