程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 克隆

  • 类型转换

  • 日期时间

  • IO流相关

  • 工具类

  • 语言特性

  • JavaBean

  • 集合类

    • 集合工具 - `CollUtil`
    • 列表工具 - `ListUtil`
    • 迭代器工具 - `IterUtil`
      • 1. 判断迭代器是否为空
        • 示例:判断迭代器是否为空
      • 2. 判断是否包含 null 元素
        • 示例:判断是否包含 null 元素
      • 3. 元素计数
        • 示例:统计元素出现次数
      • 4. 迭代器与 Iterable 互转
        • 示例:迭代器与 Iterable 互转
      • 5. 获取列表的第一个元素
        • 示例:获取第一个元素
      • 6. 获取元素类型
        • 示例:获取元素类型
      • 7. 使用分隔符将集合转换为字符串
        • 示例:将集合转换为字符串
      • 8. 将 Entry 列表转为 Map
        • 示例:将 Entry 列表转换为 Map
    • 有界优先队列 - `BoundedPriorityQueue`
    • 线程安全的 HashSet - `ConcurrentHashSet`
    • 集合串行流工具 - `CollStreamUtil`
    • 行遍历器 - `LineIter`
  • Map

  • Codec编码

  • 文本操作

  • 注解

  • 比较器

  • 异常

  • 数学

  • 线程和并发

  • 图片

  • 网络

  • 源码编译

  • 配置文件

  • 日志

  • 缓存

  • JSON

  • 加密解密

  • DFA查找

  • HTTP客户端

  • 定时任务

  • 扩展

  • 切面

  • 脚本

  • Office文档操作

  • 系统调用

  • 图形验证码

  • 网络Socket

  • JWT

  • Hutoll
  • 集合类
scholar
2024-08-20
目录

迭代器工具 - IterUtil

# 迭代器工具 - IterUtil

简介

IterUtil 是 Hutool 提供的一个专门处理 Iterator 和 Iterable 的工具类。最早这些方法存在于 CollUtil 中,但由于其通用性强,经过抽象后独立出来,以适应更多场景。IterUtil 提供了多种用于处理迭代器的实用方法,包括判断迭代器是否为空、元素类型推断、集合计数、类型转换等。

# 1. 判断迭代器是否为空

isEmpty 和 isNotEmpty 用于判断一个 Iterator 或 Iterable 是否为空或至少包含一个元素。

# 示例:判断迭代器是否为空

import cn.hutool.core.collection.IterUtil;

import java.util.Iterator;
import java.util.List;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个空的迭代器
        Iterator<String> emptyIterator = List.<String>of().iterator();

        // 判断是否为空
        boolean isEmpty = IterUtil.isEmpty(emptyIterator);
        System.out.println("空迭代器是否为空: " + isEmpty); // true

        // 初始化一个非空的迭代器
        Iterator<String> nonEmptyIterator = List.of("a", "b").iterator();

        // 判断是否为非空
        boolean isNotEmpty = IterUtil.isNotEmpty(nonEmptyIterator);
        System.out.println("非空迭代器是否为非空: " + isNotEmpty); // true
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • 方法签名:
    • isEmpty(Iterator<?> iterator):判断迭代器是否为空或无元素。
    • isNotEmpty(Iterator<?> iterator):判断迭代器是否为非空且至少包含一个元素。
  • 参数:
    • iterator: 需要判断的 Iterator 对象。
  • 返回值:boolean,true 表示迭代器为空或无元素,false 表示迭代器非空。
  • 作用:用于基础判断,适合需要在处理数据前进行空检查的场景。
  • 实际开发场景:在遍历集合、处理批量数据时,可以使用该方法先进行空判断,避免空指针异常。

# 2. 判断是否包含 null 元素

hasNull 和 isAllNull 用于判断迭代器中是否包含 null 元素,或者全部元素是否均为 null。

# 示例:判断是否包含 null 元素

import cn.hutool.core.collection.IterUtil;

import java.util.Iterator;
import java.util.List;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化包含 null 的迭代器
        Iterator<String> iterator = List.of("a", null, "c").iterator();

        // 判断是否有 null 元素
        boolean hasNull = IterUtil.hasNull(iterator);
        System.out.println("是否包含 null 元素: " + hasNull); // true

        // 初始化全部为 null 的迭代器
        Iterator<String> allNullIterator = List.of(null, null, null).iterator();

        // 判断是否全部为 null
        boolean isAllNull = IterUtil.isAllNull(allNullIterator);
        System.out.println("是否全部为 null 元素: " + isAllNull); // true
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • 方法签名:
    • hasNull(Iterator<?> iterator):判断迭代器中是否包含 null 元素。
    • isAllNull(Iterator<?> iterator):判断迭代器中是否全部为 null 元素。
  • 参数:
    • iterator: 需要判断的 Iterator 对象。
  • 返回值:boolean,true 表示包含或全部为 null,false 表示没有 null 元素。
  • 作用:用于数据校验,适合需要检查数据完整性或处理空值的场景。
  • 实际开发场景:在数据导入、数据清洗等场景中,可以使用这些方法进行空值检查。

# 3. 元素计数

countMap 方法根据集合中元素的出现次数生成一个计数 Map,即以元素为键,出现次数为值。

# 示例:统计元素出现次数

import cn.hutool.core.collection.IterUtil;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个包含重复元素的迭代器
        Iterator<String> iterator = List.of("a", "b", "a", "c", "b", "a").iterator();

        // 获取元素计数 Map
        Map<String, Integer> countMap = IterUtil.countMap(iterator);

        // 输出计数结果
        countMap.forEach((key, value) -> System.out.println(key + " 出现次数: " + value));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • 方法签名:<T> Map<T, Integer> countMap(Iterator<T> iterator)
  • 参数:
    • iterator: 需要统计的 Iterator 对象。
  • 返回值:Map<T, Integer>,键为元素,值为该元素的出现次数。
  • 作用:用于快速统计集合中元素的频率,适合分析数据分布的场景。
  • 实际开发场景:在处理日志数据、投票系统、商品分类统计时,可以使用该方法统计各元素的出现频率。

# 4. 迭代器与 Iterable 互转

asIterator 和 asIterable 分别用于将 Enumeration 转为 Iterator,将 Iterator 转为 Iterable。

# 示例:迭代器与 Iterable 互转

import cn.hutool.core.collection.IterUtil;

import java.util.Iterator;
import java.util.List;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个列表
        List<String> list = List.of("a", "b", "c");

        // 将列表转换为迭代器
        Iterator<String> iterator = list.iterator();

        // 将迭代器转换为 Iterable
        Iterable<String> iterable = IterUtil.asIterable(iterator);

        // 通过 Iterable 遍历元素
        for (String item : iterable) {
            System.out.println(item);
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • 方法签名:
    • asIterator(Enumeration<E> enumeration):将 Enumeration 转为 Iterator。
    • asIterable(Iterator<E> iterator):将 Iterator 转为 Iterable。
  • 参数:
    • enumeration: 需要转换的 Enumeration 对象。
    • iterator: 需要转换的 Iterator 对象。
  • 返回值:Iterator<E> 或 Iterable<E>,根据具体方法返回对应的转换对象。
  • 作用:用于将不同类型的迭代器互相转换,增强通用性和灵活性。
  • 实际开发场景:在需要兼容旧代码或适配多种数据结构时,可以使用这些方法进行迭代器转换。

# 5. 获取列表的第一个元素

getFirst 方法用于获取列表或迭代器中的第一个元素,适用于快速访问第一个元素的场景。

# 示例:获取第一个元素

import cn.hutool.core.collection.IterUtil;

import java.util.List;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个列表
        List<String> list = List.of("a", "b", "c");

        // 获取第一个元素
        String firstElement = IterUtil.getFirst(list);
        System.out.println("第一个元素: " + firstElement); // a
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 方法签名:<T> T getFirst(Iterable<T> iterable)
  • 参数:
    • iterable: 需要操作的 Iterable 对象。
  • 返回值:T,返回第一个元素,若无元素则返回 null。
  • 作用:在只关心列表第一个元素的场景中,快速获取该元素。
  • 实际开发场景:在处理需要快速获取列表开头数据的场景中,可以使用该方法。

# 6. 获取元素类型

getElementType 方法用于推断 Iterator 或 Iterable 中元素的类型。

# 示例:获取元素类型

import cn.hutool.core.collection.IterUtil;

import java.util.List;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个列表
        List<String> list = List.of("a", "b", "c");

        // 获取元素类型
        Class<?> elementType = IterUtil.getElementType(list);
        System.out.println("元素类型: " + elementType.getSimpleName()); // String
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 方法签名:<T> Class<?> getElementType(Iterable<T> iterable)
  • 参数:
    • iterable: 需要操作的 Iterable 对象。
  • 返回值:Class<?>,返回推断的元素类型,若无法确定类型则返回 null。
  • 作用:在泛型编程或处理不确定类型的集合时,可以用来推断元素的实际类型。
  • 实际开发场景:在需要动态判断集合中元素类型的场景中,可以使用该方法,如在编写泛型代码时。

# 7. 使用分隔符将集合转换为字符串

join 方法用于将集合中的元素按照指定的分隔符拼接为字符串。

# 示例:将集合转换为字符串

import cn.hutool.core.collection.IterUtil;

import java.util.List;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个列表
        List<String> list = List.of("a", "b", "c");

        // 使用逗号作为分隔符拼接字符串
        String joinedString = IterUtil.join(list, ", ");
        System.out.println("拼接后的字符串: " + joinedString); // a, b, c
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  • 方法签名:String join(Iterable<?> iterable, CharSequence delimiter)
  • 参数:
    • iterable: 需要拼接的 Iterable 对象。
    • delimiter: 分隔符,CharSequence 类型。
  • 返回值:String,返回拼接后的字符串。
  • 作用:快速将集合中的元素拼接为字符串,适用于日志输出、字符串组合等场景。
  • 实际开发场景:在生成动态内容、格式化输出时,可以使用该方法。

# 8. 将 Entry 列表转为 Map

toMap 方法用于将包含 Entry 对象的列表转换为 Map,或将两个列表分别作为键和值合并为 Map。

# 示例:将 Entry 列表转换为 Map

import cn.hutool.core.collection.IterUtil;

import java.util.AbstractMap;
import java.util.List;
import java.util.Map;

public class IterUtilExample {
    public static void main(String[] args) {
        // 初始化一个 Entry 列表
        List<Map.Entry<String, Integer>> entryList = List.of(
            new AbstractMap.SimpleEntry<>("a", 1),
            new AbstractMap.SimpleEntry<>("b", 2),
            new AbstractMap.SimpleEntry<>("c", 3)
        );

        // 将 Entry 列表转换为 Map
        Map<String, Integer> map = IterUtil.toMap(entryList);

        // 输出 Map
        map.forEach((key, value) -> System.out.println(key + " = " + value));
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  • 方法签名:<K, V> Map<K, V> toMap(Iterable<? extends Map.Entry<K, V>> entryIterable)
  • 参数:
    • entryIterable: 包含 Map.Entry 对象的 Iterable。
  • 返回值:Map<K, V>,返回转换后的 Map。
  • 作用:用于从 Entry 列表快速生成 Map,适用于需要动态构建 Map 的场景。
  • 实际开发场景:在处理配置项或解析数据结构时,可以使用该方法生成键值对映射。

以上是 Hutool 中 IterUtil 工具类的详细总结,包括各个 API 的作用、参数说明、使用场景,以及完整的代码示例。如果你还有其他需要讨论的内容,欢迎随时告诉我!

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
列表工具 - `ListUtil`
有界优先队列 - `BoundedPriorityQueue`

← 列表工具 - `ListUtil` 有界优先队列 - `BoundedPriorityQueue`→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式