[
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)