Class ListKit

java.lang.Object
org.miaixz.bus.core.xyz.ListKit

public class ListKit extends Object
List相关工具类
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static <T> List<T>
    addAllIfNotContains(List<T> list, List<T> otherList)
    将另一个列表中的元素加入到列表中,如果列表中已经存在此元素则忽略之
    static <T> List<List<T>>
    avgPartition(List<T> list, int limit)
    将集合平均分成多个list,返回这个集合的列表
    static <T> List<T>
    获取一个空List,这个空List不可变
    static <T> int
    lastIndexOf(List<T> list, Predicate<? super T> matcher)
    获取匹配规则定义中匹配到元素的最后位置 此方法对于某些无序集合的位置信息,以转换为数组后的位置为准。
    static <T> List<T>
    move(List<T> list, T element, int newPosition)
    将元素移动到指定列表的新位置。 如果元素不在列表中,则将其添加到新位置。 如果元素已在列表中,则先移除它,然后再将其添加到新位置。
    static <T> List<T>
    of(boolean isLinked)
    新建一个List 如果提供的初始化数组为空,新建默认初始长度的List
    static <T> List<T>
    of(boolean isLinked, Iterable<T> iterable)
    新建一个List 提供的参数为null时返回空ArrayList
    static <T> List<T>
    of(boolean isLinked, Enumeration<T> enumration)
    新建一个List 提供的参数为null时返回空ArrayList
    static <T> List<T>
    of(boolean isLinked, Iterator<T> iter)
    新建一个List 提供的参数为null时返回空ArrayList
    static <T> ArrayList<T>
    of(Iterable<T> iterable)
    新建一个ArrayList 提供的参数为null时返回空ArrayList
    static <T> ArrayList<T>
    of(Enumeration<T> enumeration)
    新建一个ArrayList 提供的参数为null时返回空ArrayList
    static <T> ArrayList<T>
    of(Iterator<T> iterator)
    新建一个ArrayList 提供的参数为null时返回空ArrayList
    static <T> ArrayList<T>
    of(T... values)
    新建一个ArrayList 如果提供的初始化数组为空,新建默认初始长度的List 替换之前的:CollKit.newArrayList()
    static <T> CopyOnWriteArrayList<T>
    ofCopyOnWrite(Collection<T> collection)
    新建一个CopyOnWriteArrayList
    static <T> CopyOnWriteArrayList<T>
    ofCopyOnWrite(T... ts)
    新建一个CopyOnWriteArrayList
    static <T> LinkedList<T>
    ofLinked(T... values)
    新建一个LinkedList 如果提供的初始化数组为空,新建默认初始长度的List
    static <T> List<T>
    page(int pageNo, int pageSize, List<T> list)
    对指定List分页取值
    static <T> List<List<T>>
    partition(List<T> list, int size)
    通过传入分区长度,将指定列表分区为不同的块,每块区域的长度相同(最后一块可能小于长度) 分区是在原List的基础上进行的,返回的分区是不可变的抽象列表,原列表元素变更,分区中元素也会变更。
    static <T> List<T>
    reverse(List<T> list)
    反序给定List,会在原List基础上直接修改 注意此方法不支持不可编辑的列表
    static <T> List<T>
    reverseNew(List<T> list)
    反序给定List,会创建一个新的List,原List数据不变
    static <T> List<T>
    setOrAppend(List<T> list, int index, T element)
    设置或增加元素。当index小于List的长度时,替换指定位置的值,否则在尾部追加
    static <T> List<T>
    setOrPadding(List<T> list, int index, T element)
    在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加null直到到达index后,设置值
    static <T> List<T>
    setOrPadding(List<T> list, int index, T element, T paddingElement)
    在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
    static <T> List<T>
    setOrPadding(List<T> list, int index, T element, T paddingElement, int indexLimit)
    在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
    static <T> List<T>
    sort(List<T> list)
    针对List自然排序,排序会修改原List
    static <T> List<T>
    sort(List<T> list, Comparator<? super T> c)
    针对List排序,排序会修改原List
    static List<String>
    根据汉字的拼音顺序排序
    static <T> List<T>
    sortByProperty(List<T> list, String property)
    根据Bean的属性排序
    static <T> List<T>
    splice(List<T> list, int start, int deleteCount, T... items)
    通过删除或替换现有元素或者原地添加新的元素来修改列表,并以列表形式返回被修改的内容。此方法不会改变原列表。 类似js的splice函数
    static <T> List<T>
    sub(List<T> list, int begionInclude, int endExclude)
    截取集合的部分
    static <T> List<T>
    sub(List<T> list, int begionInclude, int endExclude, int step)
    截取集合的部分 此方法与List.subList(int, int) 不同在于子列表是新的副本,操作子列表不会影响原列表。
    static <T> void
    swapElement(List<T> list, T element, T targetElement)
    将指定元素交换到指定元素位置,其他元素的索引值不变 交换会修改原List 如果集合中有多个相同元素,只交换第一个找到的元素
    static <T> void
    swapTo(List<T> list, T element, Integer targetIndex)
    将指定元素交换到指定索引位置,其他元素的索引值不变 交换会修改原List 如果集合中有多个相同元素,只交换第一个找到的元素
    static <T> List<T>
    unmodifiable(List<? extends T> c)
    转为只读List
    static <T> List<T>
    view(List<T> ts)
    转为一个不可变List 类似于Java9中的List.of
    static <T> List<T>
    view(T... ts)
    数组转为一个不可变List 类似于Java9中的List.of 不同于Arrays.asList,此方法不允许修改数组
    static <T> List<T>
    获取一个初始大小为0的List,这个空List可变

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ListKit

      public ListKit()
  • Method Details

    • of

      @SafeVarargs public static <T> ArrayList<T> of(T... values)
      新建一个ArrayList 如果提供的初始化数组为空,新建默认初始长度的List 替换之前的:CollKit.newArrayList()
      Type Parameters:
      T - 集合元素类型
      Parameters:
      values - 数组,可以为null
      Returns:
      List对象
    • ofLinked

      @SafeVarargs public static <T> LinkedList<T> ofLinked(T... values)
      新建一个LinkedList 如果提供的初始化数组为空,新建默认初始长度的List
      Type Parameters:
      T - 集合元素类型
      Parameters:
      values - 数组,可以为null
      Returns:
      LinkedList对象
    • of

      public static <T> List<T> of(boolean isLinked)
      新建一个List 如果提供的初始化数组为空,新建默认初始长度的List
      Type Parameters:
      T - 集合元素类型
      Parameters:
      isLinked - 是否为链表
      Returns:
      List对象
    • of

      public static <T> List<T> of(boolean isLinked, Iterable<T> iterable)
      新建一个List 提供的参数为null时返回空ArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      isLinked - 是否新建LinkedList
      iterable - Iterable
      Returns:
      List对象
    • of

      public static <T> List<T> of(boolean isLinked, Enumeration<T> enumration)
      新建一个List 提供的参数为null时返回空ArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      isLinked - 是否新建LinkedList
      enumration - Enumeration
      Returns:
      ArrayList对象
    • of

      public static <T> List<T> of(boolean isLinked, Iterator<T> iter)
      新建一个List 提供的参数为null时返回空ArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      isLinked - 是否新建LinkedList
      iter - Iterator
      Returns:
      ArrayList对象
    • of

      public static <T> ArrayList<T> of(Iterable<T> iterable)
      新建一个ArrayList 提供的参数为null时返回空ArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterable - Iterable
      Returns:
      ArrayList对象
    • of

      public static <T> ArrayList<T> of(Iterator<T> iterator)
      新建一个ArrayList 提供的参数为null时返回空ArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterator - Iterator
      Returns:
      ArrayList对象
    • of

      public static <T> ArrayList<T> of(Enumeration<T> enumeration)
      新建一个ArrayList 提供的参数为null时返回空ArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      enumeration - Enumeration
      Returns:
      ArrayList对象
    • view

      @SafeVarargs public static <T> List<T> view(T... ts)
      数组转为一个不可变List 类似于Java9中的List.of 不同于Arrays.asList,此方法不允许修改数组
      Type Parameters:
      T - 对象类型
      Parameters:
      ts - 对象
      Returns:
      不可修改List
    • view

      public static <T> List<T> view(List<T> ts)
      转为一个不可变List 类似于Java9中的List.of
      Type Parameters:
      T - 对象类型
      Parameters:
      ts - 对象
      Returns:
      不可修改List,如果提供List为null或者空,返回Collections.emptyList()
    • empty

      public static <T> List<T> empty()
      获取一个空List,这个空List不可变
      Type Parameters:
      T - 元素类型
      Returns:
      空的List
      See Also:
    • zero

      public static <T> List<T> zero()
      获取一个初始大小为0的List,这个空List可变
      Type Parameters:
      T - 元素类型
      Returns:
      空的List
    • ofCopyOnWrite

      public static <T> CopyOnWriteArrayList<T> ofCopyOnWrite(Collection<T> collection)
      新建一个CopyOnWriteArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      collection - 集合
      Returns:
      CopyOnWriteArrayList
    • ofCopyOnWrite

      @SafeVarargs public static <T> CopyOnWriteArrayList<T> ofCopyOnWrite(T... ts)
      新建一个CopyOnWriteArrayList
      Type Parameters:
      T - 集合元素类型
      Parameters:
      ts - 集合
      Returns:
      CopyOnWriteArrayList
    • sort

      public static <T> List<T> sort(List<T> list)
      针对List自然排序,排序会修改原List
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 被排序的List
      Returns:
      原list
      See Also:
    • sort

      public static <T> List<T> sort(List<T> list, Comparator<? super T> c)
      针对List排序,排序会修改原List
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 被排序的List
      c - Comparator,null表示自然排序(null安全的)
      Returns:
      原list
      See Also:
    • sortByProperty

      public static <T> List<T> sortByProperty(List<T> list, String property)
      根据Bean的属性排序
      Type Parameters:
      T - 元素类型
      Parameters:
      list - List
      property - 属性名
      Returns:
      排序后的List
    • sortByPinyin

      public static List<String> sortByPinyin(List<String> list)
      根据汉字的拼音顺序排序
      Parameters:
      list - List
      Returns:
      排序后的List
    • reverse

      public static <T> List<T> reverse(List<T> list)
      反序给定List,会在原List基础上直接修改 注意此方法不支持不可编辑的列表
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 被反转的List
      Returns:
      反转后的List
      See Also:
    • reverseNew

      public static <T> List<T> reverseNew(List<T> list)
      反序给定List,会创建一个新的List,原List数据不变
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 被反转的List
      Returns:
      反转后的List
    • setOrAppend

      public static <T> List<T> setOrAppend(List<T> list, int index, T element)
      设置或增加元素。当index小于List的长度时,替换指定位置的值,否则在尾部追加
      Type Parameters:
      T - 元素类型
      Parameters:
      list - List列表
      index - 位置
      element - 新元素
      Returns:
      原List
    • setOrPadding

      public static <T> List<T> setOrPadding(List<T> list, int index, T element)
      在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加null直到到达index后,设置值
      Type Parameters:
      T - 元素类型
      Parameters:
      list - List列表
      index - 位置
      element - 新元素
      Returns:
      the list
    • setOrPadding

      public static <T> List<T> setOrPadding(List<T> list, int index, T element, T paddingElement)
      在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
      Type Parameters:
      T - 元素类型
      Parameters:
      list - List列表
      index - 位置,不能大于(list.size()+1) * 2
      element - 新元素
      paddingElement - 填充的值
      Returns:
      the list
    • setOrPadding

      public static <T> List<T> setOrPadding(List<T> list, int index, T element, T paddingElement, int indexLimit)
      在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加paddingElement直到到达index后,设置值
      Type Parameters:
      T - 元素类型
      Parameters:
      list - List列表
      index - 位置
      element - 新元素
      paddingElement - 填充的值
      indexLimit - 最大索引限制
      Returns:
      the list
    • sub

      public static <T> List<T> sub(List<T> list, int begionInclude, int endExclude)
      截取集合的部分
      Type Parameters:
      T - 集合元素类型
      Parameters:
      list - 被截取的数组
      begionInclude - 开始位置(包含)
      endExclude - 结束位置(不包含)
      Returns:
      截取后的数组,当开始位置超过最大时,返回空的List
    • sub

      public static <T> List<T> sub(List<T> list, int begionInclude, int endExclude, int step)
      截取集合的部分 此方法与List.subList(int, int) 不同在于子列表是新的副本,操作子列表不会影响原列表。
      Type Parameters:
      T - 集合元素类型
      Parameters:
      list - 被截取的数组
      begionInclude - 开始位置(包含)
      endExclude - 结束位置(不包含)
      step - 步进
      Returns:
      截取后的数组,当开始位置超过最大时,返回空的List
    • lastIndexOf

      public static <T> int lastIndexOf(List<T> list, Predicate<? super T> matcher)
      获取匹配规则定义中匹配到元素的最后位置 此方法对于某些无序集合的位置信息,以转换为数组后的位置为准。
      Type Parameters:
      T - 元素类型
      Parameters:
      list - List集合
      matcher - 匹配器,为空则全部匹配
      Returns:
      最后一个位置
    • partition

      public static <T> List<List<T>> partition(List<T> list, int size)
      通过传入分区长度,将指定列表分区为不同的块,每块区域的长度相同(最后一块可能小于长度) 分区是在原List的基础上进行的,返回的分区是不可变的抽象列表,原列表元素变更,分区中元素也会变更。

      需要特别注意的是,此方法调用List.subList(int, int)切分List, 此方法返回的是原List的视图,也就是说原List有变更,切分后的结果也会变更。

      Type Parameters:
      T - 集合元素类型
      Parameters:
      list - 列表,为空时返回empty()
      size - 每个段的长度,当长度超过list长度时,size按照list长度计算,即只返回一个节点
      Returns:
      分段列表
    • avgPartition

      public static <T> List<List<T>> avgPartition(List<T> list, int limit)
      将集合平均分成多个list,返回这个集合的列表

      例:

       ListKit.avgPartition(null, 3); // []
       ListKit.avgPartition(Arrays.asList(1, 2, 3, 4), 2); // [[1, 2], [3, 4]]
       ListKit.avgPartition(Arrays.asList(1, 2, 3), 5); // [[1], [2], [3], [], []]
       ListKit.avgPartition(Arrays.asList(1, 2, 3), 2); // [[1, 2], [3]]
       
      Type Parameters:
      T - 集合元素类型
      Parameters:
      list - 集合
      limit - 要均分成几个list
      Returns:
      分段列表
    • swapTo

      public static <T> void swapTo(List<T> list, T element, Integer targetIndex)
      将指定元素交换到指定索引位置,其他元素的索引值不变 交换会修改原List 如果集合中有多个相同元素,只交换第一个找到的元素
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 列表
      element - 需交换元素
      targetIndex - 目标索引
    • swapElement

      public static <T> void swapElement(List<T> list, T element, T targetElement)
      将指定元素交换到指定元素位置,其他元素的索引值不变 交换会修改原List 如果集合中有多个相同元素,只交换第一个找到的元素
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 列表
      element - 需交换元素
      targetElement - 目标元素
    • unmodifiable

      public static <T> List<T> unmodifiable(List<? extends T> c)
      转为只读List
      Type Parameters:
      T - 元素类型
      Parameters:
      c - 集合
      Returns:
      只读集合
    • addAllIfNotContains

      public static <T> List<T> addAllIfNotContains(List<T> list, List<T> otherList)
      将另一个列表中的元素加入到列表中,如果列表中已经存在此元素则忽略之
      Type Parameters:
      T - 集合元素类型
      Parameters:
      list - 列表
      otherList - 其它列表
      Returns:
      此列表
    • splice

      @SafeVarargs public static <T> List<T> splice(List<T> list, int start, int deleteCount, T... items)
      通过删除或替换现有元素或者原地添加新的元素来修改列表,并以列表形式返回被修改的内容。此方法不会改变原列表。 类似js的splice函数
      Type Parameters:
      T - 元素类型
      Parameters:
      list - 列表
      start - 指定修改的开始位置(从 0 计数), 可以为负数, -1代表最后一个元素
      deleteCount - 删除个数,必须是正整数
      items - 放入的元素
      Returns:
      结果列表
    • page

      public static <T> List<T> page(int pageNo, int pageSize, List<T> list)
      对指定List分页取值
      Type Parameters:
      T - 集合元素类型
      Parameters:
      pageNo - 页码,从1开始计数,0和1效果相同
      pageSize - 每页的条目数
      list - 列表
      Returns:
      分页后的段落内容
    • move

      public static <T> List<T> move(List<T> list, T element, int newPosition)
      将元素移动到指定列表的新位置。
      • 如果元素不在列表中,则将其添加到新位置。
      • 如果元素已在列表中,则先移除它,然后再将其添加到新位置。
      Type Parameters:
      T - 列表和元素的通用类型。
      Parameters:
      list - 原始列表,元素将在这个列表上进行操作。
      element - 需要移动的元素。
      newPosition - 元素的新位置,从0开始计数,位置计算是以移除元素后的列表位置计算的
      Returns:
      the list