私はただコレクションを学習しています。一部の組織は部署のカタログを作成したいと考えています。部署のコードは、文字列の配列です:各レベルでソートを維持しながらツリーセットを逆順に並べ替え
“K1\SK1”
“K1\SK2”
“K1\SK1\SSK1”
“K1\SK1\SSK2”
“K2”
“K2\SK1\SSK1”
“K2\SK1\SSK2”
私はdescendignと昇順部門のコードを並べ替えると階層を維持する必要があります。必要に応じて、レベルの高い部署のコードを含む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の文字列をOkに追加すると自然な並べ替えが機能し、ソートの昇順にソートされます。しかし、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;
}
}