简单实现一个排序功能,用于规划任务执行的先后顺序。
如任务A依赖于任务B记成 A -> B
举例,输入一堆依赖关系: A->C B->D C->E B->C D->E F->A F->B
最终算出执行顺序为 E C A D B F
import java.util.Scanner;
import java.util.Stack;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String str = in.nextLine();
String[] strs = str.split(" ");
System.out.println(order(strs));
}
public static String order(String[] strs) {
Map<String, Integer> map = new HashMap<String, Integer>();
Arrays.asList(strs).forEach(e->{
String[] chars = e.split("->");
map.put(chars[0], map.get(chars[0]) == null ? -1 : map.get(chars[0]) - 1);
map.put(chars[1], map.get(chars[1]) == null ? 1 : map.get(chars[1]) + 1);
});
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, (o1, o2) -> o2.getValue().compareTo(o1.getValue()));
Map<String, Integer> sortedMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
StringBuilder builder = new StringBuilder();
sortedMap.entrySet().forEach(e->{
builder.append(e.getKey()).append(" ");
});
return builder.toString().substring(0, builder.toString().length() - 1);
}
}