3
我只是學習集合,我有一個任務。有些組織希望創建一個部門編目。部門代碼是字符串數組:反向排序的treeset與保持排序每個級別
「K1\SK1」
「K1\SK2」
「K1\SK1\SSK1」
「K1\SK1\SSK2」
「K2」
「K2\SK1\SSK1」
「K2\SK1\SSK2」
我需要對部門代碼降序排列和升序排列並保持層次結構。如有必要,可以將String添加到更高級別部門的代碼中,例如這裏我們有K1的字符串,但是我們沒有單獨的字符串「K1」。 排序結果後必須
ascending sort:
「K1」
「K1\SK1」
「K1\SK1\SSK1」
「K1\SK1\SSK2」
「K1\SK2」
「K2」
「K2\SK1」
「K2\SK1\SSK1」
「K2\SK1\SSK2」
descending sort:
「K2」
「K2\SK1」
「K2\SK1\SSK2」
「K2\SK2\SSK1」
「K1」
「K1\SK2」
「K1\SK1」
「K1\SK1\SSK2」
「K1\SK1\SSK1」
,問題是如何與各部門保持層次降序排序? 當在TreeSet中添加字符串時,它自然排序它工作和排序sodes升序。但是,當我嘗試使用Comparator進行降序排序時,它按照預期排序而不保持層次結構。正如我所想,我需要在父節點上從右向左移動樹。但怎麼做呢?這裏是我的代碼:
public class SortDepartment {
/**
* Adds departments and sorts it in natural sorting in set
* @param departments
* @return
*/
public Set<String> addDepartmentIfNecessaryAndSortAscending(List<String> departments){
Set<String> result = new TreeSet<>();
String temp;
for(int i = 0; i < departments.size(); i++) {
if(departments.get(i).contains("\\")) {
temp = departments.get(i).substring(0, departments.get(i).lastIndexOf("\\"));
result.add(temp);
}
result.add(departments.get(i));
}
return result;
}
/**
* Sorts departments descending
* @param departments
*/
public Set<String> sortDepartmentDescending(Set<String> departments){
Set<String> result = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
result.addAll(departments);
return result;
}
}