Class IteratorKit

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

public class IteratorKit extends Object
IterableIterator 相关工具类
Since:
Java 17+
Author:
Kimi Liu
  • Constructor Details

    • IteratorKit

      public IteratorKit()
  • Method Details

    • getIter

      public static <T> Iterator<T> getIter(Iterable<T> iterable)
      获取Iterator
      Type Parameters:
      T - 元素类型
      Parameters:
      iterable - Iterable
      Returns:
      当iterable为null返回null,否则返回对应的Iterator
    • isEmpty

      public static boolean isEmpty(Iterable<?> iterable)
      Iterable是否为空
      Parameters:
      iterable - Iterable对象
      Returns:
      是否为空
    • isEmpty

      public static boolean isEmpty(Iterator<?> iterator)
      Iterator是否为空
      Parameters:
      iterator - Iterator对象
      Returns:
      是否为空
    • isNotEmpty

      public static boolean isNotEmpty(Iterable<?> iterable)
      Iterable是否为空
      Parameters:
      iterable - Iterable对象
      Returns:
      是否为空
    • isNotEmpty

      public static boolean isNotEmpty(Iterator<?> iterator)
      Iterator是否为空
      Parameters:
      iterator - Iterator对象
      Returns:
      是否为空
    • hasNull

      public static boolean hasNull(Iterator<?> iter)
      是否包含null元素
      • Iterator为null,返回true
      • Iterator为空集合,即元素个数为0,返回false
      • Iterator中元素为"",返回false
      Parameters:
      iter - 被检查的Iterator对象,如果为null 返回true
      Returns:
      是否包含null元素
    • isAllNull

      public static boolean isAllNull(Iterable<?> iter)
      是否全部元素为null
      Parameters:
      iter - iterator 被检查的Iterable对象,如果为null 返回true
      Returns:
      是否全部元素为null
    • isAllNull

      public static boolean isAllNull(Iterator<?> iter)
      是否全部元素为null
      Parameters:
      iter - iterator 被检查的Iterator对象,如果为null 返回true
      Returns:
      是否全部元素为null
    • hasBlank

      public static boolean hasBlank(Iterable<? extends CharSequence> args)
      指定字符串集合中,是否包含空字符串。
      Parameters:
      args - 字符串列表
      Returns:
      批量判断字符串是否全部为空白
    • isAllBlank

      public static boolean isAllBlank(Iterable<? extends CharSequence> args)
      Parameters:
      args - 字符串列表
      Returns:
      批量判断字符串是否全部为空白
    • countMap

      public static <T> Map<T,Integer> countMap(Iterator<T> iter)
      根据集合返回一个元素计数的 Map 所谓元素计数就是假如这个集合中某个元素出现了n次,那将这个元素做为key,n做为value 例如:[a,b,c,c,c] 得到: a: 1 b: 1 c: 3
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iter - Iterator,如果为null返回一个空的Map
      Returns:
      Map
    • fieldValueMap

      public static <K, V> Map<K,V> fieldValueMap(Iterator<V> iter, String fieldName)
      字段值与列表值对应的Map,常用于元素对象中有唯一ID时需要按照这个ID查找对象的情况 例如:车牌号 = 车
      Type Parameters:
      K - 字段名对应值得类型,不确定请使用Object
      V - 对象类型
      Parameters:
      iter - 对象列表
      fieldName - 字段名(会通过反射获取其值)
      Returns:
      某个字段值与对象对应Map
    • fieldValueAsMap

      public static <K, V> Map<K,V> fieldValueAsMap(Iterator<?> iter, String fieldNameForKey, String fieldNameForValue)
      两个字段值组成新的Map
      Type Parameters:
      K - 字段名对应值得类型,不确定请使用Object
      V - 值类型,不确定使用Object
      Parameters:
      iter - 对象列表
      fieldNameForKey - 做为键的字段名(会通过反射获取其值)
      fieldNameForValue - 做为值的字段名(会通过反射获取其值)
      Returns:
      某个字段值与对象对应Map
    • fieldValueList

      public static <V, R> List<R> fieldValueList(Iterable<V> iterable, String fieldName)
      获取指定Bean列表中某个字段,生成新的列表
      Type Parameters:
      V - 对象类型
      R - 返回元素类型
      Parameters:
      iterable - 对象列表
      fieldName - 字段名(会通过反射获取其值)
      Returns:
      某个字段值与对象对应Map
    • fieldValueList

      public static <V, R> List<R> fieldValueList(Iterator<V> iter, String fieldName)
      获取指定Bean列表中某个字段,生成新的列表
      Type Parameters:
      V - 对象类型
      R - 返回元素类型
      Parameters:
      iter - 对象列表
      fieldName - 字段名(会通过反射获取其值)
      Returns:
      某个字段值与对象对应Map
    • join

      public static <T> String join(Iterator<T> iterator, CharSequence conjunction)
      以 conjunction 为分隔符将集合转换为字符串 如果集合元素为数组、IterableIterator,则递归组合其为字符串
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterator - 集合
      conjunction - 分隔符
      Returns:
      连接后的字符串
    • join

      public static <T> String join(Iterator<T> iterator, CharSequence conjunction, String prefix, String suffix)
      以 conjunction 为分隔符将集合转换为字符串 如果集合元素为数组、IterableIterator,则递归组合其为字符串
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterator - 集合
      conjunction - 分隔符
      prefix - 每个元素添加的前缀,null表示不添加
      suffix - 每个元素添加的后缀,null表示不添加
      Returns:
      连接后的字符串
    • join

      public static <T> String join(Iterator<T> iterator, CharSequence conjunction, Function<T,? extends CharSequence> func)
      以 conjunction 为分隔符将集合转换为字符串 如果集合元素为数组、IterableIterator,则递归组合其为字符串
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterator - 集合
      conjunction - 分隔符
      func - 集合元素转换器,将元素转换为字符串
      Returns:
      连接后的字符串
    • toMap

      public static <K, V> Map<K,V> toMap(Iterable<K> keys, Iterable<V> values)
      将键列表和值列表转换为Map 以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。 如果值多于键,忽略多余的值。
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      keys - 键列表
      values - 值列表
      Returns:
      标题内容Map
    • toMap

      public static <K, V> Map<K,V> toMap(Iterable<K> keys, Iterable<V> values, boolean isOrder)
      将键列表和值列表转换为Map 以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。 如果值多于键,忽略多余的值。
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      keys - 键列表
      values - 值列表
      isOrder - 是否有序
      Returns:
      标题内容Map
    • toMap

      public static <K, V> Map<K,V> toMap(Iterator<K> keys, Iterator<V> values)
      将键列表和值列表转换为Map 以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。 如果值多于键,忽略多余的值。
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      keys - 键列表
      values - 值列表
      Returns:
      标题内容Map
    • toMap

      public static <K, V> Map<K,V> toMap(Iterator<K> keys, Iterator<V> values, boolean isOrder)
      将键列表和值列表转换为Map 以键为准,值与键位置需对应。如果键元素数多于值元素,多余部分值用null代替。 如果值多于键,忽略多余的值。
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      keys - 键列表
      values - 值列表
      isOrder - 是否有序
      Returns:
      标题内容Map
    • toListMap

      public static <K, V> Map<K,List<V>> toListMap(Iterable<V> iterable, Function<V,K> keyMapper)
      将列表转成值为List的HashMap
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      iterable - 值列表
      keyMapper - Map的键映射
      Returns:
      HashMap
    • toListMap

      public static <T, K, V> Map<K,List<V>> toListMap(Iterable<T> iterable, Function<T,K> keyMapper, Function<T,V> valueMapper)
      将列表转成值为List的HashMap
      Type Parameters:
      T - 列表值类型
      K - 键类型
      V - 值类型
      Parameters:
      iterable - 值列表
      keyMapper - Map的键映射
      valueMapper - Map中List的值映射
      Returns:
      HashMap
    • toListMap

      public static <T, K, V> Map<K,List<V>> toListMap(Map<K,List<V>> resultMap, Iterable<T> iterable, Function<T,K> keyMapper, Function<T,V> valueMapper)
      将列表转成值为List的Map集合
      Type Parameters:
      T - 列表值类型
      K - 键类型
      V - 值类型
      Parameters:
      resultMap - 结果Map,可自定义结果Map类型
      iterable - 值列表
      keyMapper - Map的键映射
      valueMapper - Map中List的值映射
      Returns:
      HashMap
    • toMap

      public static <K, V> Map<K,V> toMap(Iterable<V> iterable, Function<V,K> keyMapper)
      将列表转成HashMap
      Type Parameters:
      K - 键类型
      V - 值类型
      Parameters:
      iterable - 值列表
      keyMapper - Map的键映射
      Returns:
      HashMap
    • toMap

      public static <T, K, V> Map<K,V> toMap(Iterable<T> iterable, Function<T,K> keyMapper, Function<T,V> valueMapper)
      将列表转成HashMap
      Type Parameters:
      T - 列表值类型
      K - 键类型
      V - 值类型
      Parameters:
      iterable - 值列表
      keyMapper - Map的键映射
      valueMapper - Map的值映射
      Returns:
      HashMap
    • asIterator

      public static <E> Iterator<E> asIterator(Enumeration<E> e)
      Enumeration转换为Iterator

      Adapt the specified Enumeration to the Iterator interface

      Type Parameters:
      E - 集合元素类型
      Parameters:
      e - Enumeration
      Returns:
      Iterator
    • asIterable

      public static <E> Iterable<E> asIterable(Iterator<E> iter)
      Iterator 转为 Iterable, 但是仅可使用一次
      Type Parameters:
      E - 元素类型
      Parameters:
      iter - Iterator
      Returns:
      Iterable
    • get

      public static <E> E get(Iterator<E> iterator, int index) throws IndexOutOfBoundsException
      遍历Iterator,获取指定index位置的元素
      Type Parameters:
      E - 元素类型
      Parameters:
      iterator - Iterator
      index - 位置
      Returns:
      元素,找不到元素返回null
      Throws:
      IndexOutOfBoundsException - index < 0时报错
    • getFirst

      public static <T> T getFirst(Iterator<T> iterator)
      获取集合的第一个元素
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterator - Iterator
      Returns:
      第一个元素
    • getFirstNoneNull

      public static <T> T getFirstNoneNull(Iterator<T> iterator)
      获取集合的第一个非空元素
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iterator - Iterator
      Returns:
      第一个非空元素,null表示未找到
    • getFirst

      public static <T> T getFirst(Iterator<T> iterator, Predicate<T> predicate)
      返回Iterator中第一个匹配规则的值
      Type Parameters:
      T - 数组元素类型
      Parameters:
      iterator - Iterator
      predicate - 匹配接口,实现此接口自定义匹配规则
      Returns:
      匹配元素,如果不存在匹配元素或Iterator为空,返回 null
    • getElementType

      public static Class<?> getElementType(Iterable<?> iterable)
      获得Iterable对象的元素类型(通过第一个非空元素判断) 注意,此方法至少会调用多次next方法
      Parameters:
      iterable - Iterable
      Returns:
      元素类型,当列表为空或元素全部为null时,返回null
    • getElementType

      public static Class<?> getElementType(Iterator<?> iterator)
      获得Iterator对象的元素类型(通过第一个非空元素判断) 注意,此方法至少会调用多次next方法
      Parameters:
      iterator - Iterator,为 null返回null
      Returns:
      元素类型,当列表为空或元素全部为null时,返回null
    • edit

      public static <T> List<T> edit(Iterator<T> iter, UnaryOperator<T> editor)
      编辑,此方法产生一个新ArrayList 编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:
       1、过滤出需要的对象,如果返回null表示这个元素对象抛弃
       2、修改元素对象,返回集合中为修改后的对象
       
      Type Parameters:
      T - 集合元素类型
      Parameters:
      iter - 集合
      editor - 编辑器接口, null表示不编辑
      Returns:
      过滤后的集合
    • remove

      public static <E> Iterator<E> remove(Iterator<E> iter, Predicate<E> predicate)
      移除集合中满足条件的所有元素,此方法在原集合上直接修改 通过实现Predicate接口,完成元素的移除,可以实现以下功能:
       1、移除指定对象,Predicate.test(Object)方法返回true的对象将被使用Iterator.remove()方法移除。
       
      Type Parameters:
      E - 集合元素类型
      Parameters:
      iter - 集合
      predicate - 过滤器接口,删除Predicate.test(Object)true的元素
      Returns:
      编辑后的集合
    • filterToList

      public static <E> List<E> filterToList(Iterator<E> iter, Predicate<E> predicate)
      过滤Iterator并将过滤后满足条件的元素添加到List中
      Type Parameters:
      E - 元素类型
      Parameters:
      iter - Iterator
      predicate - 过滤器,Predicate.test(Object)true保留
      Returns:
      ArrayList
    • filtered

      public static <E> FilterIterator<E> filtered(Iterator<? extends E> iterator, Predicate<? super E> predicate)
      获取一个新的 FilterIterator,用于过滤指定元素
      Type Parameters:
      E - 元素类型
      Parameters:
      iterator - 被包装的 Iterator
      predicate - 过滤断言,Predicate.test(Object)true保留元素。
      Returns:
      FilterIterator
    • empty

      public static <T> Iterator<T> empty()
      返回一个空Iterator
      Type Parameters:
      T - 元素类型
      Returns:
      空Iterator
      See Also:
    • trans

      public static <F, T> Iterator<T> trans(Iterator<F> iterator, Function<? super F,? extends T> function)
      按照给定函数,转换Iterator为另一种类型的Iterator
      Type Parameters:
      F - 源元素类型
      T - 目标元素类型
      Parameters:
      iterator - 源Iterator
      function - 转换函数
      Returns:
      转换后的Iterator
    • size

      public static int size(Iterable<?> iterable)
      返回 Iterable 对象的元素数量
      Parameters:
      iterable - Iterable对象
      Returns:
      Iterable对象的元素数量
    • size

      public static int size(Iterator<?> iterator)
      返回 Iterator 对象的元素数量
      Parameters:
      iterator - Iterator对象
      Returns:
      Iterator对象的元素数量
    • isEqualList

      public static boolean isEqualList(Iterable<?> iterable1, Iterable<?> iterable2)

      判断两个Iterable中的元素与其顺序是否相同 当满足下列情况时返回true

      此方法来自Apache-Commons-Collections4。
      Parameters:
      iterable1 - 列表1
      iterable2 - 列表2
      Returns:
      是否相同
    • clear

      public static void clear(Iterator<?> iterator)
      清空指定Iterator,此方法遍历后调用Iterator.remove()移除每个元素
      Parameters:
      iterator - Iterator
    • forEach

      public static <E> void forEach(Iterator<E> iterator, Consumer<? super E> consumer)
      遍历Iterator 当consumer为null表示不处理,但是依旧遍历Iterator
      Type Parameters:
      E - 元素类型
      Parameters:
      iterator - Iterator
      consumer - 节点消费,null表示不处理
    • toString

      public static <E> String toString(Iterator<E> iterator)
      拼接 Iterator为字符串
      Type Parameters:
      E - 元素类型
      Parameters:
      iterator - Iterator
      Returns:
      字符串
    • toString

      public static <E> String toString(Iterator<E> iterator, Function<? super E,String> transFunc)
      拼接 Iterator为字符串
      Type Parameters:
      E - 元素类型
      Parameters:
      iterator - Iterator
      transFunc - 元素转字符串函数
      Returns:
      字符串
    • toString

      public static <E> String toString(Iterator<E> iterator, Function<? super E,String> transFunc, String delimiter, String prefix, String suffix)
      拼接 Iterator为字符串
      Type Parameters:
      E - 元素类型
      Parameters:
      iterator - Iterator
      transFunc - 元素转字符串函数
      delimiter - 分隔符
      prefix - 前缀
      suffix - 后缀
      Returns:
      字符串
    • getIter

      public static Iterator<?> getIter(Object obj)
      从给定的对象中获取可能存在的Iterator,规则如下:
      Parameters:
      obj - 可以获取Iterator的对象
      Returns:
      Iterator,如果提供对象为null,返回null