Skip to content

Commit 3379bda

Browse files
committed
! show-duplicate-java-classes: improve output sort
1 parent 1c11fd2 commit 3379bda

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

bin/show-duplicate-java-classes

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
# @Function
4-
# Find duplicate classes among java lib dirs and class dirs..
4+
# Find duplicate classes among java lib dirs and class dirs.
55
#
66
# @Usage
77
# $ show-duplicate-java-classes # search jars from current dir
@@ -218,15 +218,26 @@ def print_duplicate_classes_info(class_paths_to_duplicate_classes):
218218
return
219219

220220
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+
221224
# sort key(class_paths) and value(duplicate_classes)
222225
class_paths_to_duplicate_classes = [(sorted(cps), sorted(dcs))
223226
for cps, dcs in class_paths_to_duplicate_classes.items()]
224227
# 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])))
230241

231242
idx_str_max_len = len(str(len(class_paths_to_duplicate_classes)))
232243
for idx, (class_paths, classes) in enumerate(class_paths_to_duplicate_classes, start=1):

0 commit comments

Comments
 (0)