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;
}
}