diff --git a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java index 19b729ada..b045f2838 100644 --- a/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/date/TimeUtil.java @@ -1,6 +1,7 @@ package cn.hutool.core.date; import cn.hutool.core.date.format.GlobalCustomFormat; +import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.text.StrUtil; import cn.hutool.core.util.ObjUtil; @@ -346,19 +347,11 @@ public class TimeUtil extends TemporalAccessorUtil { /** * 格式化时间函数 * + * @param dateTimeFormatter {@link DateTimeFormatter} * @return 格式化时间的函数 */ - public static Function formatTimeFunction(DateTimeFormatter dateTimeFormatter) { - return time -> format(time, dateTimeFormatter); - } - - /** - * 格式化日期函数 - * - * @return 格式化时间的函数 - */ - public static Function formatDateFunction(DateTimeFormatter dateTimeFormatter) { - return date -> format(date, dateTimeFormatter); + public static Function formatFunc(final DateTimeFormatter dateTimeFormatter) { + return LambdaUtil.toFunction(TimeUtil::format, dateTimeFormatter); } /** diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java index 43bb2733b..19ccd47d2 100755 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/LambdaUtil.java @@ -13,8 +13,7 @@ import java.lang.invoke.SerializedLambda; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.lang.reflect.Proxy; -import java.util.function.BiConsumer; -import java.util.function.Function; +import java.util.function.*; /** * Lambda相关工具类 @@ -34,12 +33,12 @@ public class LambdaUtil { * MyTeacher myTeacher = new MyTeacher(); * Class supplierClass = LambdaUtil.getRealClass(myTeacher::getAge); * Assert.assertEquals(MyTeacher.class, supplierClass); - * } + * } * *
  • 引用静态无参方法:
    {@code
     	 * 			Class staticSupplierClass = LambdaUtil.getRealClass(MyTeacher::takeAge);
     	 * 			Assert.assertEquals(MyTeacher.class, staticSupplierClass);
    -	 * 			}
    + * } *
  • * * 在以下场景无法获取到正确类型 @@ -123,7 +122,7 @@ public class LambdaUtil { * * * @param func 函数 - * @param lambda的类型 + * @param lambda的类型 * @return 方法名称 * @throws IllegalArgumentException 非Getter或Setter方法 * @since 5.7.23 @@ -136,8 +135,8 @@ public class LambdaUtil { * 等效于 Obj::getXxx * * @param getMethod getter方法 - * @param 调用getter方法对象类型 - * @param getter方法返回值类型 + * @param 调用getter方法对象类型 + * @param getter方法返回值类型 * @return Obj::getXxx */ @SuppressWarnings("unchecked") @@ -148,10 +147,10 @@ public class LambdaUtil { /** * 等效于 Obj::getXxx * - * @param clazz 调用getter方法对象类 + * @param clazz 调用getter方法对象类 * @param fieldName 字段名称 - * @param 调用getter方法对象类型 - * @param getter方法返回值类型 + * @param 调用getter方法对象类型 + * @param getter方法返回值类型 * @return Obj::getXxx */ @SuppressWarnings("unchecked") @@ -163,8 +162,8 @@ public class LambdaUtil { * 等效于 Obj::setXxx * * @param setMethod setter方法 - * @param 调用setter方法对象类型 - * @param

    setter方法返回的值类型 + * @param 调用setter方法对象类型 + * @param

    setter方法返回的值类型 * @return Obj::setXxx */ @SuppressWarnings("unchecked") @@ -175,10 +174,10 @@ public class LambdaUtil { /** * Obj::setXxx * - * @param clazz 调用setter方法对象类 + * @param clazz 调用setter方法对象类 * @param fieldName 字段名称 - * @param 调用setter方法对象类型 - * @param

    setter方法返回的值类型 + * @param 调用setter方法对象类型 + * @param

    setter方法返回的值类型 * @return Obj::setXxx */ @SuppressWarnings("unchecked") @@ -189,17 +188,60 @@ public class LambdaUtil { /** * 等效于 Obj::method * - * @param lambdaType 接受lambda的函数式接口类型 - * @param clazz 调用类 - * @param methodName 方法名 + * @param lambdaType 接受lambda的函数式接口类型 + * @param clazz 调用类 + * @param methodName 方法名 * @param paramsTypes 方法参数类型数组 - * @param 函数式接口类型 + * @param 函数式接口类型 * @return Obj::method */ public static F build(final Class lambdaType, final Class clazz, final String methodName, final Class... paramsTypes) { return LambdaFactory.build(lambdaType, clazz, methodName, paramsTypes); } + /** + * 通过自定义固定参数,将{@link BiFunction}转换为{@link Function} + * + * @param biFunction {@link BiFunction} + * @param param 参数 + * @param 参数类型 + * @param 参数2类型 + * @param 返回值类型 + * @return {@link Function} + * @since 6.0.0 + */ + public static Function toFunction(final BiFunction biFunction, final U param) { + return (t) -> biFunction.apply(t, param); + } + + /** + * 通过自定义固定参数,将{@link BiPredicate}转换为{@link Predicate} + * + * @param biPredicate {@link BiFunction} + * @param param 参数 + * @param 参数类型 + * @param 参数2类型 + * @return {@link Predicate} + * @since 6.0.0 + */ + public static Predicate toPredicate(final BiPredicate biPredicate, final U param) { + return (t) -> biPredicate.test(t, param); + } + + /** + * 通过自定义固定参数,将{@link BiConsumer}转换为{@link Consumer} + * + * @param biConsumer {@link BiConsumer} + * @param param 参数 + * @param 参数类型 + * @param 参数2类型 + * @return {@link Consumer} + * @since 6.0.0 + */ + public static Consumer toPredicate(final BiConsumer biConsumer, final U param) { + return (t) -> biConsumer.accept(t, param); + } + //region Private methods /** diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/PredicateUtil.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/PredicateUtil.java index 580150885..153ddf980 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/PredicateUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/PredicateUtil.java @@ -12,6 +12,13 @@ import java.util.function.Predicate; */ public class PredicateUtil { + /** + * 反向条件 + * + * @param predicate 条件 + * @param 参数类型 + * @return 反向条件 {@link Predicate} + */ public static Predicate negate(final Predicate predicate) { return predicate.negate(); } diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/SerBinaryOperator.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/SerBinaryOperator.java index 50d1f6d6c..31f737aa3 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/SerBinaryOperator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/SerBinaryOperator.java @@ -10,9 +10,9 @@ import java.util.function.BinaryOperator; /** * SerBinaryOperator * - * @author VampireAchao - * @since 2022/6/8 * @param 参数和返回值类型 + * @author VampireAchao + * @see BinaryOperator */ @FunctionalInterface public interface SerBinaryOperator extends BinaryOperator, Serializable { @@ -44,7 +44,7 @@ public interface SerBinaryOperator extends BinaryOperator, Serializable { } /** - * Returns a {@link SerBinaryOperator} which returns the lesser of two elements + * Returns a {@code SerBinaryOperator} which returns the lesser of two elements * according to the specified {@code Comparator}. * * @param the type of the input arguments of the comparator @@ -59,7 +59,7 @@ public interface SerBinaryOperator extends BinaryOperator, Serializable { } /** - * Returns a {@link SerBinaryOperator} which returns the greater of two elements + * Returns a {@code SerBinaryOperator} which returns the greater of two elements * according to the specified {@code Comparator}. * * @param the type of the input arguments of the comparator diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer.java index e9380ea0f..b4d798ddc 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer.java @@ -66,7 +66,7 @@ public interface SerConsumer extends Consumer, Serializable { */ default SerConsumer andThen(final SerConsumer after) { Objects.requireNonNull(after); - return (T t) -> { + return (final T t) -> { accept(t); after.accept(t); }; diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer3.java b/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer3.java index 888d503d1..dd1200c62 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer3.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/func/SerConsumer3.java @@ -34,10 +34,10 @@ public interface SerConsumer3 extends Serializable { * @param p2 参数二 * @param p3 参数三 */ - default void accept(P1 p1, P2 p2, P3 p3) { + default void accept(final P1 p1, final P2 p2, final P3 p3) { try { accepting(p1, p2, p3); - } catch (Exception e) { + } catch (final Exception e) { throw new UtilException(e); } } @@ -54,9 +54,9 @@ public interface SerConsumer3 extends Serializable { * operation followed by the {@code after} operation * @throws NullPointerException if {@code after} is null */ - default SerConsumer3 andThen(SerConsumer3 after) { + default SerConsumer3 andThen(final SerConsumer3 after) { Objects.requireNonNull(after); - return (P1 p1, P2 p2, P3 p3) -> { + return (final P1 p1, final P2 p2, final P3 p3) -> { accept(p1, p2, p3); after.accept(p1, p2, p3); }; diff --git a/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java index 7a825c4de..75f8f8aa1 100644 --- a/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/date/TimeUtilTest.java @@ -326,9 +326,9 @@ public class TimeUtilTest { @Test public void formatDateFunctionTest() { - List dateStrList = Stream.of("2023-03-01", "2023-03-02") + final List dateStrList = Stream.of("2023-03-01", "2023-03-02") .map(LocalDate::parse) - .map(TimeUtil.formatDateFunction(DatePattern.CHINESE_DATE_FORMATTER)) + .map(TimeUtil.formatFunc(DatePattern.CHINESE_DATE_FORMATTER)) .collect(Collectors.toList()); Assert.assertEquals("2023年03月01日", dateStrList.get(0)); Assert.assertEquals("2023年03月02日", dateStrList.get(1)); @@ -336,9 +336,9 @@ public class TimeUtilTest { @Test public void formatTimeFunctionTest() { - List dateStrList = Stream.of("2023-03-01T12:23:56", "2023-03-02T12:23:56") + final List dateStrList = Stream.of("2023-03-01T12:23:56", "2023-03-02T12:23:56") .map(LocalDateTime::parse) - .map(TimeUtil.formatTimeFunction(DatePattern.CHINESE_DATE_FORMATTER)) + .map(TimeUtil.formatFunc(DatePattern.CHINESE_DATE_FORMATTER)) .collect(Collectors.toList()); Assert.assertEquals("2023年03月01日", dateStrList.get(0)); Assert.assertEquals("2023年03月02日", dateStrList.get(1));