Skip to content

Commit 83d0ede

Browse files
committed
解决toMultiple在list的元素不按id升序排列的情况下返回结果不全
1 parent 871365d commit 83d0ede

File tree

5 files changed

+54
-5
lines changed

5 files changed

+54
-5
lines changed

AbsGradeLibrary/absgrade-1.0.5.jar

9.43 KB
Binary file not shown.

AbsGradeLibrary/absgrade-1.0.jar

-8.1 KB
Binary file not shown.

AbsGradeLibrary/src/zuo/biao/absgrade/AbsGradeUtil.java

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package zuo.biao.absgrade;
1616

1717
import java.util.ArrayList;
18+
import java.util.Collections;
19+
import java.util.Comparator;
1820
import java.util.LinkedHashMap;
1921
import java.util.List;
2022
import java.util.Map;
@@ -89,8 +91,8 @@ public interface DoubleGradeCallback<T> extends MultipleGradeCallback<T> {
8991
}
9092

9193

92-
93-
94+
95+
9496
/**转为单层
9597
* 适用场景:微信朋友圈单层评论
9698
* @param <T>
@@ -211,16 +213,32 @@ public static <T> List<T> toDouble(List<T> list, @NotNull DoubleGradeCallback<T>
211213
return new ArrayList<T>(parentMap.values());
212214
}
213215

214-
215-
216+
217+
216218
/**转为多层(无限层级)
217219
* 适用场景:文件夹多级文件(夹),例如系统文件夹和百度网盘
220+
* sorted = false;
218221
* @param <T>
219222
* @param list
220223
* @param callback
221-
* @return
224+
* @return {@link #toMultiple(List, boolean, MultipleGradeCallback)}
222225
*/
223226
public static <T> List<T> toMultiple(List<T> list, @NotNull MultipleGradeCallback<T> callback) {
227+
return toMultiple(list, false, callback);
228+
}
229+
/**转为多层(无限层级)
230+
* 适用场景:文件夹多级文件(夹),例如系统文件夹和百度网盘
231+
* @param <T>
232+
* @param list
233+
* @param sorted 已排序,这里不再需要排序
234+
* @param callback
235+
* @return
236+
* @see {@link #sort(List, GradeCallback)}
237+
*/
238+
public static <T> List<T> toMultiple(List<T> list, boolean sorted, @NotNull MultipleGradeCallback<T> callback) {
239+
if (sorted == false) {
240+
list = sort(list, callback);
241+
}
224242
if (list == null || list.isEmpty()) {
225243
return list;
226244
}
@@ -299,4 +317,35 @@ public static <T> List<T> toMultiple(List<T> list, @NotNull MultipleGradeCallbac
299317
return topItemMap == null ? null : new ArrayList<T>(topItemMap.values());
300318
}
301319

320+
321+
/**列表按id升序排序
322+
* 解决顺序错乱导致结果不全
323+
* @param list
324+
* @param callback
325+
* @return
326+
*/
327+
public static <T> List<T> sort(List<T> list, final GradeCallback<T> callback) {
328+
329+
if (list != null && list.isEmpty() == false) {
330+
331+
Collections.sort(list, new Comparator<T>() {
332+
333+
@Override
334+
public int compare(T o1, T o2) {
335+
Long id1 = o1 == null ? null : callback.getId(o1);
336+
Long id2 = o2 == null ? null : callback.getId(o2);
337+
if (id1 == null) {
338+
id1 = new Long(0);
339+
}
340+
if (id2 == null) {
341+
id2 = new Long(0);
342+
}
343+
return id1.compareTo(id2);
344+
}
345+
});
346+
}
347+
348+
return list;
349+
}
350+
302351
}

AbsGradeTest/libs/absgrade-1.0.5.jar

9.43 KB
Binary file not shown.

AbsGradeTest/libs/absgrade-1.0.jar

-8.1 KB
Binary file not shown.

0 commit comments

Comments
 (0)