|
1 | 1 | #!/usr/bin/env python3 |
2 | 2 | # -*- coding: utf-8 -*- |
3 | 3 | # @Function |
4 | | -# Find duplicate classes among java lib dirs and class dirs.. |
| 4 | +# Find duplicate classes among java lib dirs and class dirs. |
5 | 5 | # |
6 | 6 | # @Usage |
7 | 7 | # $ show-duplicate-java-classes # search jars from current dir |
@@ -218,15 +218,26 @@ def print_duplicate_classes_info(class_paths_to_duplicate_classes): |
218 | 218 | return |
219 | 219 |
|
220 | 220 | duplicate_classes_total_count = sum(len(dcs) for dcs in class_paths_to_duplicate_classes.values()) |
| 221 | + print('Found %s duplicate classes in %s class path set:' % |
| 222 | + (duplicate_classes_total_count, len(class_paths_to_duplicate_classes))) |
| 223 | + |
221 | 224 | # sort key(class_paths) and value(duplicate_classes) |
222 | 225 | class_paths_to_duplicate_classes = [(sorted(cps), sorted(dcs)) |
223 | 226 | for cps, dcs in class_paths_to_duplicate_classes.items()] |
224 | 227 | # sort kv pairs |
225 | | - class_paths_to_duplicate_classes = sorted(class_paths_to_duplicate_classes, reverse=True, |
226 | | - key=lambda item: (len(item[0]), len(item[1]), '|'.join(item[0]))) |
227 | | - |
228 | | - print('Found %s duplicate classes in %s class path set:' % |
229 | | - (duplicate_classes_total_count, len(class_paths_to_duplicate_classes))) |
| 228 | + # |
| 229 | + # sort by multiple keys: |
| 230 | + # 1. class paths count, *descending*; aka. sort by len(item[0]) *reverse=True* |
| 231 | + # 2. duplicate classes count, *descending*; aka. sort by len(item[1]) *reverse=True* |
| 232 | + # 3. class paths, ascending; aka. sort by item[0] |
| 233 | + # sort also ensure output consistent for same input. |
| 234 | + # |
| 235 | + # How to sort objects by multiple keys in Python? |
| 236 | + # https://stackoverflow.com/questions/1143671 |
| 237 | + # Sort a list by multiple attributes? |
| 238 | + # https://stackoverflow.com/questions/4233476 |
| 239 | + class_paths_to_duplicate_classes.sort(key=lambda item: item[0]) |
| 240 | + class_paths_to_duplicate_classes.sort(reverse=True, key=lambda item: (len(item[0]), len(item[1]))) |
230 | 241 |
|
231 | 242 | idx_str_max_len = len(str(len(class_paths_to_duplicate_classes))) |
232 | 243 | for idx, (class_paths, classes) in enumerate(class_paths_to_duplicate_classes, start=1): |
|
0 commit comments