[
https://issues.apache.org/jira/browse/LANG-1634?focusedWorklogId=837666&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-837666
]
ASF GitHub Bot logged work on LANG-1634:
----------------------------------------
Author: ASF GitHub Bot
Created on: 07/Jan/23 05:22
Start Date: 07/Jan/23 05:22
Worklog Time Spent: 10m
Work Description: singhbaljit commented on code in PR #684:
URL: https://github.com/apache/commons-lang/pull/684#discussion_r1063955651
##########
src/main/java/org/apache/commons/lang3/ObjectUtils.java:
##########
@@ -226,6 +227,63 @@ public static boolean anyNotNull(final Object... values) {
return firstNonNull(values) != null;
}
+ /**
+ * <p>
+ * Calls the given {@code consumer's} {@link Consumer#accept(Object)}
method with the first {@code non-null} value
+ * from {@code objects}. If all the values are null, the consumer is not
invoked. This is equivalent to the call
+ * {@code ObjectUtils.acceptIfNonNull(ObjectUtils.firstNonNull(objects),
consumer)}
+ * </p>
+ *
+ * <p>
+ * The caller is responsible for thread-safety and exception handling of
consumer.
+ * </p>
+ *
+ * <pre>
+ * ObjectUtils.acceptFirstNonNull(bean::setValue, null) -
setValue not invoked
+ * ObjectUtils.acceptFirstNonNull(bean::setValue, null, "abc", "def") -
setValue invoked with "abc"
+ * ObjectUtils.acceptFirstNonNull(v -> bean.setValue(v), "abc") -
setValue invoked with "abc"
+ * </pre>
+ *
+ * @param <T> the type of the object
+ * @param objects the values to test, may be {@code null} or empty
+ * @param consumer the consumer operation to invoke with the first
non-null {@code objects}.
+ * @see #firstNonNull(Object...)
+ * @see #acceptIfNonNull(Object, Consumer)
+ * @since 3.12
+ */
+ @SafeVarargs
+ public static <T> void acceptFirstNonNull(final Consumer<T> consumer,
final T... objects) {
+ acceptIfNonNull(firstNonNull(objects), consumer);
+ }
+
+ /**
+ * <p>
+ * Calls the given {@code consumer's} {@link Consumer#accept(Object)}
method with the {@code object} if it is
+ * {@code non-null}.
+ * </p>
+ *
+ * <p>
+ * The caller is responsible for thread-safety and exception handling of
consumer.
+ * </p>
+ *
+ * <pre>
+ * ObjectUtils.acceptIfNonNull(null, bean::setValue) -
setValue not invoked
+ * ObjectUtils.acceptIfNonNull("abc", bean::setValue) -
setValue invoked with "abc"
+ * ObjectUtils.acceptIfNonNull("abc", v -> bean.setValue(v)) -
setValue invoked with "abc"
+ * </pre>
+ *
+ * @param <T> the type of the object
+ * @param object the {@code Object} to test, may be {@code null}
+ * @param consumer the consumer operation to invoke with {@code object} if
it is {@code non-null}
+ * @see #acceptFirstNonNull(Consumer, Object...)
+ * @since 3.12
+ */
+ public static <T> void acceptIfNonNull(final T object, final Consumer<T>
consumer) {
Review Comment:
more user-friendly: `Consumer<? super T> consumer`.
Also, `requireNonNull(consumer, "consumer")`.
Issue Time Tracking
-------------------
Worklog Id: (was: 837666)
Time Spent: 3h 50m (was: 3h 40m)
> ObjectUtils - apply Consumer with non-null value
> ------------------------------------------------
>
> Key: LANG-1634
> URL: https://issues.apache.org/jira/browse/LANG-1634
> Project: Commons Lang
> Issue Type: Improvement
> Components: lang.*
> Reporter: Bindul Bhowmik
> Priority: Minor
> Labels: pull-request-available
> Time Spent: 3h 50m
> Remaining Estimate: 0h
>
> There are multiple places in code where we have to check if a value is
> {{null}} before using it in a setter or other method, like:
> {code:java}
> if (valueX != null) {
> bean.setValue(valueX);
> someObject.compute(valueX, "bar");
> }
> {code}
> This enhancement request is to add a couple of methods in {{ObjectUtils}} to
> wrap this logic, like the following:
> {code:java}
> public static <T> void applyIfNonNull(final Consumer<T> consumer, final T
> object)
> public static <T> void applyFirstNonNull(final Consumer<T> consumer, final
> T... objects)
> {code}
> With this the two statements above could be used as:
> {code:java}
> ObjectUtils.applyIfNonNull(bean::setValue, valueX);
> ObjectUtils.appyIfNonNull(v -> someObject.compute(v, "bar"), valueX);
> {code}
> The benefit of this should increase with more such null checks we need in the
> code that can be replaced by single statements.
> Pull request forthcoming.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)