簡體   English   中英

Lambda比較器排序列表

[英]Lambda Comparator Sorting List

我有以下任務:

在CompanyTest中實現以下功能:

創建一個名為allEmployees的所有部門的所有雇員的集合列表。 使用排序方法(比較器c)對列表進行排序,該方法從List接口繼承allEmployees。 用lambda表達式實現比較器。

public class CompanyTest1 {
    public static void main(String[]args) {

        Sequence<Integer> MNR = new Sequence<Integer>(){
            int id = 0;
            public Integer next() {
                return id++;
            }
        };

        List<String> AllEmployees = new ArrayList<>();


        Department dep1 = new Department("Verwaltung", MNR);
        Department dep2 = new Department("Lager", MNR);
        dep1.addEmployee("Chris", "Schmidt"); 
        dep1.addEmployee("Max", "Mustermann");
        dep2.addEmployee("Müller", "Wagner");
        System.out.println("Department: " +dep1.getName());
        dep1.forEach(Employee -> System.out.println(Employee));
        System.out.println("Department: " +dep2.getName());
        dep2.forEach(Employee -> System.out.println(Employee));
        AllEmployees.sort((Comparator<? super E> c) (Employee e1, Employee e2)->e1.getLastName()-e2.getFirstname()); 
    }
}

我不知道我在做什么錯。 有人可以幫助我更正我的代碼嗎? 我仍然是Java noob,感謝所有幫助。

import java.util.Iterator;

import java.util.*;

public class Department implements Iterable<Employee> {
    private String name;
    private Map<Integer, Employee> employees;
    private Sequence<Integer> employeeIdSequence;


    public Department(String name, Sequence<Integer> employeeIdSequence){
        this.name = name;
        employees = new HashMap<Integer, Employee>();
        this.employeeIdSequence = employeeIdSequence;
    }


    public String getName() {
        return name;
    }

    public Sequence<Integer>  addEmployee(String firstName, String lastName) {
        int neueMitarbeiterNummer = employeeIdSequence.next();
        employees.put(neueMitarbeiterNummer, new Employee(firstName, lastName));
        return employeeIdSequence;


//      Employee a = new Employee(firstName, lastName);
//      int id = employeeIdSequence.next();
//      employees.put(id, a);

    }


    @Override
    public Iterator<Employee> iterator() {
        return employees.values().iterator();
    }

}
public class Employee {
    private String firstName;
    private String lastName;

    public Employee(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstname() {
        return firstName;
    }
    public String getLastName() {
        return lastName;
    }

    public String toString() {
        return "Vorname: " + firstName + " " + "Nachname: " + lastName;
    }



}

問題是列表所需的比較器與傳遞給該列表的sort比較器之間的簽名不匹配。

您的變量聲明:

List<String> AllEmployees

說列表包含String實例。 List的通用sort方法將使用元素的通用類型的比較器,這意味着:

AllEmployees.sort

接受字符串的比較器( Comparator<String> )。

問題是該比較器的lambda表達式具有Employee的比較器的簽名:

(Employee e1, Employee e2)->e1.getLastName()-e2.getFirstname()

只能用作Comparator<Employee> 這就是為什么編譯器阻止您的AllEmployees列表要求使用它代替Comparator<String>AllEmployees

您可能打算將所有員工條目添加到allEmployees列表中,然后allEmployees列表進行排序:

List<Employee> allEmployees = new ArrayList<>();
dep1.forEach(employee -> allEmployees.add(employee));
dep2.forEach(employee -> allEmployees.add(employee));

//And run sort
allEmployees.sort(
(Employee e1, Employee e2) ->  e1.getLastName().compareTo(e2.getLastName()));

請注意,您需要正確實現指示排序順序的比較器邏輯。 上面的示例僅比較姓氏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM