编辑代码

import java.util.*;

public class TopologicalSort {
    public static List<Task> sort(List<Task> tasks) {
        Map<Task, Integer> inDegree = new HashMap<>();
        for (Task task : tasks) {
            inDegree.put(task, 0);
        }

        for (Task task : tasks) {
            for (Task prerequisite : task.getPrerequisites()) {
                inDegree.put(task, inDegree.get(task) + 1);
            }
        }

        Queue<Task> queue = new LinkedList<>();
        for (Map.Entry<Task, Integer> entry : inDegree.entrySet()) {
            if (entry.getValue() == 0) {
                queue.offer(entry.getKey());
            }
        }

        List<Task> topoOrder = new ArrayList<>();
        while (!queue.isEmpty()) {
            Task task = queue.poll();
            topoOrder.add(task);

            for (Task successor : task.getSuccessors()) {
                inDegree.put(successor, inDegree.get(successor) - 1);
                if (inDegree.get(successor) == 0) {
                    queue.offer(successor);
                }
            }
        }

        if (topoOrder.size() != tasks.size()) {
            throw new RuntimeException("Cycle detected in the task dependencies!");
        }

        return topoOrder;
    }
}