Apache Commons Lang之ArrayUtils

码农不识Apache,码尽一生也枉然。

常量数组

1
2
3
4
5
6
7
public static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[0];
public static final String[] EMPTY_STRING_ARRAY = new String[0];
public static final long[] EMPTY_LONG_ARRAY = new long[0];
public static final Long[] EMPTY_LONG_OBJECT_ARRAY = new Long[0];
public static final int[] EMPTY_INT_ARRAY = new int[0];
public static final Integer[] EMPTY_INTEGER_OBJECT_ARRAY = new Integer[0];

转换为Map

toMap(Object[] array)

将二维数组转换为Map。

1
2
3
4
5
Map colorMap = ArrayUtils.toMap(new String[][] {
{"RED", "#FF0000"},
{"GREEN", "#00FF00"},
{"BLUE", "#0000FF"}
});

生成数组

T[] toArray(final T… items)

将不定参数转换为数组。

1
2
String[] array = ArrayUtils.toArray("1", "2");
String[] emptyArray = ArrayUtils.<String>toArray();

null转空数组

Object[] nullToEmpty(Object[] array)

将null数组转为对应类型的空数组,如果array不是null,则返回array。

1
String[] arr = ArrayUtils.nullToEmpty((String[]) null);

数组操作

T[] subarray(T[] array, int startIndexInclusive, int endIndexExclusive)

截取数组开始索引位置和结束索引位置的数组为子数组

1
2
Object[]s1=ArrayUtils.subarray(newObject[]{"aa","bb","cc"},0,1); // ["aa"]
Object[]s2=ArrayUtils.subarray(newObject[]{"aa","bb","cc"},0,2); // ["aa", "bb"]

reverse(long[] array)

反转数组。

1
ArrayUtils.reverse(new String[]{"aa","bb"});//结果是:{"bb","aa"}

swap(Object[] array, int offset1, int offset2)

交换数组中的元素。

1
2
3
4
5
ArrayUtils.swap(["1", "2", "3"], 0, 2) -> ["3", "2", "1"]
ArrayUtils.swap(["1", "2", "3"], 0, 0) -> ["1", "2", "3"]
ArrayUtils.swap(["1", "2", "3"], 1, 0) -> ["2", "1", "3"]
ArrayUtils.swap(["1", "2", "3"], 0, 5) -> ["1", "2", "3"]
ArrayUtils.swap(["1", "2", "3"], -1, 1) -> ["2", "1", "3"]

数组元素查找

int indexOf(Object[] array, Object objectToFind)

数组元素所在的索引位置,如果没有则返回-1,可指定起始搜索位置。

1
2
3
ArrayUtils.indexOf(new String[]{"aa","bb","cc"},"cc"); // 2
ArrayUtils.indexOf(new String[]{"aa","bb","bb"},"bb",2); // 2
ArrayUtils.indexOf(newObject[]{"aa","bb","cc"},"cc",3); // -1

int lastIndexOf(Object[] array, Object objectToFind, int startIndex)

同indexOf(Object[] array, Object objectToFind)相反。反向查询某个object在数组中的位置,可以指定起始搜索位置。

contains(Object[] array, Object objectToFind)

判断数组中是否包含某个元素。

1
ArrayUtils.contains(new String[]{"a", "b", "c"}, "a"); // true

数组判空

boolean isEmpty(Object[] array)

判断数组是否为空。

1
2
3
4
ArrayUtils.isEmpty(new String[]{"21","是"}); // false
ArrayUtils.isEmpty(new String[]{""}); // false
ArrayUtils.isEmpty(new String[]{null}); // false
ArrayUtils.isEmpty(new String[]{}); // true

boolean isNotEmpty(T[] array)

同``相反。判断数组是否不为空。

合并数组元素

T[] addAll(T[] array1, T… array2)

合并多个数组到某一个数组中。

1
2
3
4
5
6
ArrayUtils.addAll(null, null)     = null
ArrayUtils.addAll(array1, null) = cloned copy of array1
ArrayUtils.addAll(null, array2) = cloned copy of array2
ArrayUtils.addAll([], []) = []
ArrayUtils.addAll([null], [null]) = [null, null]
ArrayUtils.addAll(["a", "b", "c"], ["1", "2", "3"]) = ["a", "b", "c", "1", "2", "3"]

T[] add(T[] array, T element)

将单个元素合并到数组中。

1
2
3
4
5
ArrayUtils.add(null, null)      = IllegalArgumentException
ArrayUtils.add(null, "a") = ["a"]
ArrayUtils.add(["a"], null) = ["a", null]
ArrayUtils.add(["a"], "b") = ["a", "b"]
ArrayUtils.add(["a", "b"], "c") = ["a", "b", "c"]

T[] add(T[] array, int index, T element)

将单个元素合并到指定索引位置的数组中。

1
2
3
4
5
ArrayUtils.add(null, 0, null)      = IllegalArgumentException
ArrayUtils.add(null, 0, "a") = ["a"]
ArrayUtils.add(["a"], 1, null) = ["a", null]
ArrayUtils.add(["a"], 0, "b") = ["b", "a"]
ArrayUtils.add(["a", "b"], 1, "c") = ["a", "c", "b"]

移除数组元素

T[] remove(T[] array, int index)

移除数组中指定索引位置的元素。

1
2
3
4
ArrayUtils.remove(["a"], 0)           = []
ArrayUtils.remove(["a", "b"], 0) = ["b"]
ArrayUtils.remove(["a", "b"], 1) = ["a"]
ArrayUtils.remove(["a", "b", "c"], 1) = ["a", "c"]

T[] removeAll(T[] array, int… indices)

同<T> T[] remove(T[] array, int index)相似,移除数组中所有指定索引位置的元素。

1
2
ArrayUtils.removeAll(["a", "b", "c"], 0, 2) = ["b"]
ArrayUtils.removeAll(["a", "b", "c"], 1, 2) = ["a"]

T[] removeElement(T[] array, Object element)

移除数组中的第一个element元素。

1
2
3
4
5
ArrayUtils.removeElement(null, "a")            = null
ArrayUtils.removeElement([], "a") = []
ArrayUtils.removeElement(["a"], "b") = ["a"]
ArrayUtils.removeElement(["a", "b"], "a") = ["b"]
ArrayUtils.removeElement(["a", "b", "a"], "a") = ["b", "a"]

<div class="reprint" id="reprint-statement">
    
        <div class="reprint__author">
            <span class="reprint-meta" style="font-weight: bold;">
                <i class="fas fa-user">
                    文章作者:
                </i>
            </span>
            <span class="reprint-info">
                <a href="/" rel="external nofollow noreferrer">blinkfox</a>
            </span>
        </div>
        <div class="reprint__type">
            <span class="reprint-meta" style="font-weight: bold;">
                <i class="fas fa-link">
                    文章链接:
                </i>
            </span>
            <span class="reprint-info">
                <a href="/posts/2018/09/28/bian-cheng-yu-yan/java/commons/apache-commons-lang-zhi-arrayutils/">/posts/2018/09/28/bian-cheng-yu-yan/java/commons/apache-commons-lang-zhi-arrayutils/</a>
            </span>
        </div>
        <div class="reprint__notice">
            <span class="reprint-meta" style="font-weight: bold;">
                <i class="fas fa-copyright">
                    版权声明:
                </i>
            </span>
            <span class="reprint-info">
                本博客所有文章除特別声明外,均采用
                <a href="https://creativecommons.org/licenses/by/4.0/deed.zh" rel="external nofollow noreferrer" target="_blank">CC BY 4.0</a>
                许可协议。转载请注明来源
                <a href="/" target="_blank">blinkfox</a>
                !
            </span>
        </div>
    
</div>

<script async defer>
  document.addEventListener("copy", function (e) {
    let toastHTML = '<span>复制成功,请遵循本文的转载规则</span><button class="btn-flat toast-action" onclick="navToReprintStatement()" style="font-size: smaller">查看</a>';
    M.toast({html: toastHTML})
  });

  function navToReprintStatement() {
    $("html, body").animate({scrollTop: $("#reprint-statement").offset().top - 80}, 800);
  }
</script>

  目录