[ 
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 -&gt; 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 -&gt; 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)

Reply via email to