[ 
https://issues.apache.org/jira/browse/LANG-1074?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

haiyang li updated LANG-1074:
-----------------------------
    Description: 
Could we add the method: removeElementAll to remove all the occurrences of the 
specified element from the specified 
(boolean/char/byte/short/int/long/float/double/Object) array:
{code:title=org.apache.commons.lang3.ArrayUtils.java|borderStyle=solid}
    public static <T> T[] removeElementAll(final T[] array, final Object 
element) {
        int index = indexOf(array, element);

        if (index == INDEX_NOT_FOUND) {
            return clone(array);
        }

        int[] indices = new int[array.length - index];
        int count = 0;
        indices[count++] = index;

        for (;;) {
            index = indexOf(array, element, ++index);

            if (index == INDEX_NOT_FOUND) {
                break;
            } else {
                indices[count++] = index;
            }
        }

        return (T[]) removeAll((Object) array, Arrays.copyOfRange(indices, 0, 
count));
    }
{code}

or maybe better:
{code:title=org.apache.commons.lang3.ArrayUtils.java|borderStyle=solid}
   public static <T> T[] removeElement(final T[] a, final Object element, 
boolean removeAll) {
        int index = indexOf(a, element);

        if (index == INDEX_NOT_FOUND) {
            return clone(a);
        } else if (!removeAll || index >= a.length - 1) {
            return remove(a, index);
        } else {
            int[] indices = new int[a.length - index];
            int count = 0;
            indices[count++] = index++;
            
            for (int len = a.length; index < len; index++) {

                if ((a[index] == null) ? element == null : (element == null ? 
false : a[index].equals(element))) {
                    indices[count++] = index;
                }
            }

            return (T[]) removeAll((Object) a, Arrays.copyOfRange(indices, 0, 
count));
        }
    }
{code}


  was:
Could we add the method: removeElementAll to remove all the occurrences of the 
specified element from the specified 
(boolean/char/byte/short/int/long/float/double/Object) array:
{code:title=org.apache.commons.lang3.ArrayUtils.java|borderStyle=solid}
    public static <T> T[] removeElementAll(final T[] array, final Object 
element) {
        int index = indexOf(array, element);

        if (index == INDEX_NOT_FOUND) {
            return clone(array);
        }

        int[] indices = new int[array.length - index];
        int count = 0;
        indices[count++] = index;

        for (;;) {
            index = indexOf(array, element, ++index);

            if (index == INDEX_NOT_FOUND) {
                break;
            } else {
                indices[count++] = index;
            }
        }

        return (T[]) removeAll((Object) array, Arrays.copyOfRange(indices, 0, 
count));
    }
{code}

or maybe better:
{code:title=org.apache.commons.lang3.ArrayUtils.java|borderStyle=solid}
    public static <T> T[] removeElement(final T[] a, final Object element, 
boolean removeAll) {
        int index = indexOf(a, element);

        if (index == INDEX_NOT_FOUND) {
            return clone(a);
        } else if (!removeAll || index >= a.length - 1) {
            return remove(a, index);
        } else {
            int[] indices = new int[a.length - index];
            int count = 0;
            indices[count++] = index;

            for (;;) {
                index = indexOf(a, element, ++index);

                if (index == INDEX_NOT_FOUND) {
                    break;
                } else {
                    indices[count++] = index;
                }
            }

            return (T[]) removeAll((Object) a, Arrays.copyOfRange(indices, 0, 
count));
        }
    } 
{code}



> Add removeElementAll method in class ArrayUtils
> -----------------------------------------------
>
>                 Key: LANG-1074
>                 URL: https://issues.apache.org/jira/browse/LANG-1074
>             Project: Commons Lang
>          Issue Type: Improvement
>          Components: lang.*
>    Affects Versions: 3.3.2
>            Reporter: haiyang li
>            Priority: Minor
>             Fix For: Patch Needed
>
>         Attachments: LANG-1074.patch.txt
>
>
> Could we add the method: removeElementAll to remove all the occurrences of 
> the specified element from the specified 
> (boolean/char/byte/short/int/long/float/double/Object) array:
> {code:title=org.apache.commons.lang3.ArrayUtils.java|borderStyle=solid}
>     public static <T> T[] removeElementAll(final T[] array, final Object 
> element) {
>         int index = indexOf(array, element);
>         if (index == INDEX_NOT_FOUND) {
>             return clone(array);
>         }
>         int[] indices = new int[array.length - index];
>         int count = 0;
>         indices[count++] = index;
>         for (;;) {
>             index = indexOf(array, element, ++index);
>             if (index == INDEX_NOT_FOUND) {
>                 break;
>             } else {
>                 indices[count++] = index;
>             }
>         }
>         return (T[]) removeAll((Object) array, Arrays.copyOfRange(indices, 0, 
> count));
>     }
> {code}
> or maybe better:
> {code:title=org.apache.commons.lang3.ArrayUtils.java|borderStyle=solid}
>    public static <T> T[] removeElement(final T[] a, final Object element, 
> boolean removeAll) {
>         int index = indexOf(a, element);
>         if (index == INDEX_NOT_FOUND) {
>             return clone(a);
>         } else if (!removeAll || index >= a.length - 1) {
>             return remove(a, index);
>         } else {
>             int[] indices = new int[a.length - index];
>             int count = 0;
>             indices[count++] = index++;
>             
>             for (int len = a.length; index < len; index++) {
>                 if ((a[index] == null) ? element == null : (element == null ? 
> false : a[index].equals(element))) {
>                     indices[count++] = index;
>                 }
>             }
>             return (T[]) removeAll((Object) a, Arrays.copyOfRange(indices, 0, 
> count));
>         }
>     }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to