From eb2c09a9bd8f0cbe12a7286c674317f13c2ed2db Mon Sep 17 00:00:00 2001 From: duandazhi Date: Sat, 20 Aug 2022 19:50:35 +0800 Subject: [PATCH] =?UTF-8?q?comparingIndexed=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E9=9B=86=E5=90=88=E7=9A=84=E6=94=AF=E6=8C=81=EF=BC=8C=E5=8F=AF?= =?UTF-8?q?=E5=8F=98=E5=8F=82=E6=95=B0=E4=B8=8D=E5=A4=9F=E5=8F=8B=E5=A5=BD?= =?UTF-8?q?=E3=80=82=20=E8=AF=B4=E6=98=8E=EF=BC=9A=E7=94=9F=E4=BA=A7?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E4=BD=BF=E7=94=A8=E6=95=B0=E7=BB=84=E3=80=81?= =?UTF-8?q?=E9=9B=86=E5=90=88=E6=9B=B4=E5=A4=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/comparator/CompareUtil.java | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java b/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java index 945045668..878baa6a9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/comparator/CompareUtil.java @@ -1,5 +1,7 @@ package cn.hutool.core.comparator; +import java.lang.reflect.Array; +import java.util.Collection; import java.util.Comparator; import java.util.Objects; import java.util.function.Function; @@ -236,6 +238,7 @@ public class CompareUtil { /** * 索引比较器
* 通过keyExtractor函数,提取对象的某个属性或规则,根据提供的排序数组,完成比较
+ * objs中缺失的,默认排序在前面(atEndIfMiss=false)
* * @param keyExtractor 从对象中提取中文(参与比较的内容) * @param objs 参与排序的数组,数组的元素位置决定了对象的排序先后 @@ -245,17 +248,38 @@ public class CompareUtil { * @since 5.8.0 */ @SuppressWarnings("unchecked") - public static Comparator comparingIndexed(final Function keyExtractor, final U... objs) { + public static Comparator comparingIndexed(final Function keyExtractor, final U[] objs) { return comparingIndexed(keyExtractor, false, objs); } + /** + * 索引比较器
+ * 通过keyExtractor函数,提取对象的某个属性或规则,根据提供的排序数组,完成比较
+ * objs中缺失的,默认排序在前面(atEndIfMiss=false)
+ * + * @param keyExtractor 从对象中提取中文(参与比较的内容) + * @param objs 参与排序的集合对象,数组的元素位置决定了对象的排序先后 + * @param 对象类型 + * @param 数组对象类型 + * @return 索引比较器 + * @since 6.0.0 + */ + @SuppressWarnings("unchecked") + public static Comparator comparingIndexed(final Function keyExtractor, final Collection objs) { + U[] array = null; + if (objs != null && objs.size() > 0) { + array = objs.toArray((U[]) Array.newInstance(objs.iterator().next().getClass(), objs.size())); + } + return comparingIndexed(keyExtractor, false, array); + } + /** * 索引比较器
* 通过keyExtractor函数,提取对象的某个属性或规则,根据提供的排序数组,完成比较
* * @param keyExtractor 从对象中提取排序键的函数(参与比较的内容) - * @param atEndIfMiss 如果不在列表中是否排在后边 - * @param objs 参与排序的数组,数组的元素位置决定了对象的排序先后 + * @param atEndIfMiss 如果不在列表中是否排在后边; true:排在后边; false:排在前边 + * @param objs 参与排序的数组,数组的元素位置决定了对象的排序先后, 示例:int[] objs = new int[]{3, 2, 1, 4, 5,6}; * @param 对象类型 * @param 数组对象类型 * @return 索引比较器