Class ArrayWrapper<A,E>

java.lang.Object
org.miaixz.bus.core.center.array.ArrayWrapper<A,E>
Type Parameters:
A - 数组类型
E - 数组元素类型
All Implemented Interfaces:
Iterable<E>, Wrapper<A>

public class ArrayWrapper<A,E> extends Object implements Wrapper<A>, Iterable<E>
数组包装,提供一系列数组方法
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
    ArrayWrapper(A array)
    构造
  • Method Summary

    Modifier and Type
    Method
    Description
    append(E element)
    将新元素添加到已有数组中 添加新元素会生成一个新的数组,不影响原数组
    appendArray(A array)
    将新数组追加到已有数组中 追加新数组会生成一个新的数组,不影响原数组
    edit(UnaryOperator<E> editor)
    对每个数组元素执行指定操作,替换元素为修改后的元素
    返回数组中第一个匹配规则的值
    返回数组中第一个非空元素
    get(int index)
    获取数组对象中指定index的值,支持负数,例如-1表示倒数第一个值 如果数组下标越界,返回null
    获得数组类型
    获取数组对象的元素类型,方法调用参数与返回结果举例: Object[] = Object.class String[] = String.class int[] = int.class Integer[] = Integer.class null = null String = null
    获取原始对象
    getSub(int beginInclude, int endExclude)
    获取子数组
    getSub(int beginInclude, int endExclude, int step)
    获取子数组
    int
    indexOf(Object value)
    返回数组中指定元素所在位置,未找到返回Normal.__1
    int
    indexOf(Object value, int offset)
    返回数组中指定元素所在位置,未找到返回Normal.__1
    insert(int index, E element)
    将新元素插入到已有数组中的某个位置 如果插入位置为负数,从原数组从后向前计数,若大于原数组长度,则空白处用默认值填充
    insertArray(int index, A arrayToInsert)
    将新元素插入到已有数组中的某个位置 如果插入位置为负数,从原数组从后向前计数,若大于原数组长度,则空白处用默认值填充
    boolean
    数组是否为空
    boolean
    是否原始类型数组
    boolean
    isSorted(Comparator<E> comparator)
    检查数组是否有序,升序或者降序
    boolean
    isSorted(Comparator<E> comparator, boolean isDESC)
    数组是否有有序 反序,前一个小于后一个则返回错 正序,前一个大于后一个则返回错
     
    int
    返回数组中指定最后的所在位置,未找到返回Normal.__1
    int
    获取数组长度
    int
    matchIndex(int offset, Predicate<E> matcher)
    返回数组中第一个匹配规则的值的位置
    int
    返回数组中第一个匹配规则的值的位置
    int
    matchLastIndex(int offset, Predicate<E> matcher)
    返回数组中最后一个匹配规则的值的位置(从后向前查找)
    int
    返回数组中最后一个匹配规则的值的位置(从后向前查找)
    static <A, E> ArrayWrapper<A,E>
    of(A array)
    包装数组为ArrayWrapper
    static <A, E> ArrayWrapper<A,E>
    of(Class<E> componentType, int length)
    创建ArrayWrapper,创建一个指定长度的空数组
    replace(int index, A values)
    从数组中的指定位置开始,按顺序使用新元素替换旧元素 如果 指定位置 为负数,那么生成一个新数组,其中新元素按顺序放在数组头部 如果 指定位置 大于等于 旧数组长度,那么生成一个新数组,其中新元素按顺序放在数组尾部 如果 指定位置 加上 新元素数量 大于 旧数组长度,那么生成一个新数组,指定位置之前是旧数组元素,指定位置及之后为新元素 否则,从已有数组中的指定位置开始,按顺序使用新元素替换旧元素,返回旧数组
    setOrAppend(int index, E value)
    将元素值设置为数组的某个位置,当给定的index大于等于数组长度,则追加
    setOrPadding(int index, E value)
    将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加null0直到到达index后,设置值
    setOrPadding(int index, E value, E paddingElement)
    将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
    setOrPadding(int index, E value, E paddingElement, int indexLimit)
    将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface java.lang.Iterable

    forEach, spliterator
  • Constructor Details

    • ArrayWrapper

      public ArrayWrapper(A array)
      构造
      Parameters:
      array - 数组对象(非空)
  • Method Details

    • of

      public static <A, E> ArrayWrapper<A,E> of(Class<E> componentType, int length)
      创建ArrayWrapper,创建一个指定长度的空数组
      Type Parameters:
      A - 数组类型
      E - 数组元素类型
      Parameters:
      componentType - 元素类型
      length - 长度
      Returns:
      ArrayWrapper
    • of

      public static <A, E> ArrayWrapper<A,E> of(A array)
      包装数组为ArrayWrapper
      Type Parameters:
      A - 数组类型
      E - 元素类型
      Parameters:
      array - 数组(非空)
      Returns:
      ArrayWrapper
    • getRaw

      public A getRaw()
      Description copied from interface: Wrapper
      获取原始对象
      Specified by:
      getRaw in interface Wrapper<A>
      Returns:
      原始对象
    • length

      public int length()
      获取数组长度
      Returns:
      数组长度
    • isPrimitive

      public boolean isPrimitive()
      是否原始类型数组
      Returns:
      是否原始类型数组
    • getComponentType

      public Class<?> getComponentType()
      获取数组对象的元素类型,方法调用参数与返回结果举例:
      • Object[] = Object.class
      • String[] = String.class
      • int[] = int.class
      • Integer[] = Integer.class
      • null = null
      • String = null
      Returns:
      元素类型
    • getArrayType

      public Class<?> getArrayType()
      获得数组类型
      Returns:
      数组类型
    • isEmpty

      public boolean isEmpty()
      数组是否为空
      Returns:
      是否为空
    • get

      public E get(int index)
      获取数组对象中指定index的值,支持负数,例如-1表示倒数第一个值 如果数组下标越界,返回null
      Parameters:
      index - 下标,支持负数,-1表示最后一个元素
      Returns:
    • firstNonNull

      public E firstNonNull()
      返回数组中第一个非空元素
      Returns:
      第一个非空元素,如果 不存在非空元素 或 数组为空,返回null
    • firstMatch

      public E firstMatch(Predicate<E> matcher)
      返回数组中第一个匹配规则的值
      Parameters:
      matcher - 匹配接口,实现此接口自定义匹配规则
      Returns:
      第一个匹配元素,如果 不存在匹配元素 或 数组为空,返回 null
    • indexOf

      public int indexOf(Object value)
      返回数组中指定元素所在位置,未找到返回Normal.__1
      Parameters:
      value - 被检查的元素
      Returns:
      数组中指定元素所在位置,未找到返回Normal.__1
    • matchIndex

      public int matchIndex(Predicate<E> matcher)
      返回数组中第一个匹配规则的值的位置
      Parameters:
      matcher - 匹配接口,实现此接口自定义匹配规则
      Returns:
      第一个匹配元素的位置,Normal.__1表示未匹配到
    • indexOf

      public int indexOf(Object value, int offset)
      返回数组中指定元素所在位置,未找到返回Normal.__1
      Parameters:
      value - 被检查的元素
      offset - 开始的位置
      Returns:
      数组中指定元素所在位置,未找到返回Normal.__1
    • matchIndex

      public int matchIndex(int offset, Predicate<E> matcher)
      返回数组中第一个匹配规则的值的位置
      Parameters:
      offset - 检索开始的位置,不能为负数
      matcher - 匹配接口,实现此接口自定义匹配规则
      Returns:
      第一个匹配元素的位置,Normal.__1表示未匹配到
    • lastIndexOf

      public int lastIndexOf(Object value)
      返回数组中指定最后的所在位置,未找到返回Normal.__1
      Parameters:
      value - 被检查的元素
      Returns:
      数组中指定元素最后的所在位置,未找到返回Normal.__1
    • matchLastIndex

      public int matchLastIndex(Predicate<E> matcher)
      返回数组中最后一个匹配规则的值的位置(从后向前查找)
      Parameters:
      matcher - 匹配接口,实现此接口自定义匹配规则
      Returns:
      最后一个匹配元素的位置,Normal.__1表示未匹配到
    • matchLastIndex

      public int matchLastIndex(int offset, Predicate<E> matcher)
      返回数组中最后一个匹配规则的值的位置(从后向前查找)
      Parameters:
      offset - 从后向前查找时的起始位置,一般为array.length - 1
      matcher - 匹配接口,实现此接口自定义匹配规则
      Returns:
      最后一个匹配元素的位置,Normal.__1表示未匹配到
    • setOrPadding

      public ArrayWrapper<A,E> setOrPadding(int index, E value)
      将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加null0直到到达index后,设置值
      Parameters:
      index - 位置
      value - 新元素或新数组
      Returns:
      this
    • setOrPadding

      public ArrayWrapper<A,E> setOrPadding(int index, E value, E paddingElement)
      将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
      Parameters:
      index - 位置
      value - 新元素或新数组
      paddingElement - 填充
      Returns:
      this
    • setOrPadding

      public ArrayWrapper<A,E> setOrPadding(int index, E value, E paddingElement, int indexLimit)
      将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
      Parameters:
      index - 位置
      value - 新元素或新数组
      paddingElement - 填充
      indexLimit - 索引限制
      Returns:
      this
    • setOrAppend

      public ArrayWrapper<A,E> setOrAppend(int index, E value)
      将元素值设置为数组的某个位置,当给定的index大于等于数组长度,则追加
      Parameters:
      index - 位置,大于等于长度则追加,否则替换
      value - 新元素或新数组
      Returns:
      this
    • append

      public ArrayWrapper<A,E> append(E element)
      将新元素添加到已有数组中 添加新元素会生成一个新的数组,不影响原数组
      Parameters:
      element - 新元素或新数组
      Returns:
      新数组
    • appendArray

      public ArrayWrapper<A,E> appendArray(A array)
      将新数组追加到已有数组中 追加新数组会生成一个新的数组,不影响原数组
      Parameters:
      array - 需要追加的数组数组
      Returns:
      新数组
    • insert

      public ArrayWrapper<A,E> insert(int index, E element)
      将新元素插入到已有数组中的某个位置 如果插入位置为负数,从原数组从后向前计数,若大于原数组长度,则空白处用默认值填充
      Parameters:
      index - 插入位置,支持负数。此位置为对应此位置元素之前的空档
      element - 元素
      Returns:
      新数组
    • insertArray

      public ArrayWrapper<A,E> insertArray(int index, A arrayToInsert)
      将新元素插入到已有数组中的某个位置 如果插入位置为负数,从原数组从后向前计数,若大于原数组长度,则空白处用默认值填充
      Parameters:
      index - 插入位置,支持负数。此位置为对应此位置元素之前的空档
      arrayToInsert - 新元素数组
      Returns:
      新数组
    • replace

      public ArrayWrapper<A,E> replace(int index, A values)
      从数组中的指定位置开始,按顺序使用新元素替换旧元素
      • 如果 指定位置 为负数,那么生成一个新数组,其中新元素按顺序放在数组头部
      • 如果 指定位置 大于等于 旧数组长度,那么生成一个新数组,其中新元素按顺序放在数组尾部
      • 如果 指定位置 加上 新元素数量 大于 旧数组长度,那么生成一个新数组,指定位置之前是旧数组元素,指定位置及之后为新元素
      • 否则,从已有数组中的指定位置开始,按顺序使用新元素替换旧元素,返回旧数组
      Parameters:
      index - 位置
      values - 新值或新数组
      Returns:
      this
    • edit

      public ArrayWrapper<A,E> edit(UnaryOperator<E> editor)
      对每个数组元素执行指定操作,替换元素为修改后的元素
      Parameters:
      editor - 编辑器接口,为 null则返回原数组
      Returns:
      this
    • getSub

      public A getSub(int beginInclude, int endExclude)
      获取子数组
      Parameters:
      beginInclude - 开始位置(包括)
      endExclude - 结束位置(不包括)
      Returns:
      新的数组
      See Also:
    • getSub

      public A getSub(int beginInclude, int endExclude, int step)
      获取子数组
      Parameters:
      beginInclude - 开始位置(包括)
      endExclude - 结束位置(不包括)
      step - 步进
      Returns:
      新的数组
    • isSorted

      public boolean isSorted(Comparator<E> comparator)
      检查数组是否有序,升序或者降序

      若传入空数组,则返回false;元素全部相等,返回 true

      Parameters:
      comparator - 比较器
      Returns:
      数组是否有序
      Throws:
      NullPointerException - 如果数组元素含有null值
    • isSorted

      public boolean isSorted(Comparator<E> comparator, boolean isDESC)
      数组是否有有序
      • 反序,前一个小于后一个则返回错
      • 正序,前一个大于后一个则返回错
      Parameters:
      comparator - Comparator
      isDESC - 是否反序
      Returns:
      是否有序
    • iterator

      public Iterator<E> iterator()
      Specified by:
      iterator in interface Iterable<A>
    • toString

      public String toString()
      Overrides:
      toString in class Object