You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Stream API创建包含'0'-'9'的HashSet<Character>?

解决创建包含'0'-'9'的Set问题

你的代码存在两个问题:一是IntStream.map(i -> (char) i)本质上仍返回IntStream(char会自动转回int类型),所以后续boxed()会把int装箱成Integer,最终得到Set<Integer>;二是IntStream.range('1', '9')是左闭右开区间,只能生成'1'到'8'的ASCII值,既没包含'0'也没包含'9'。

下面给你几种JDK17下可行的实现方式:

  • 推荐方式:用mapToObj转换为字符流
    使用IntStream.rangeClosed生成闭区间的ASCII值,再通过mapToObj直接转换为Character对象,最终收集成Set:

    var totalSet = IntStream.rangeClosed('0', '9')
        .mapToObj(c -> (char) c)
        .collect(Collectors.toSet());
    
  • 循环初始化(简单直接)
    对于小范围的字符集合,直接用for循环添加是最直观的方式:

    Set<Character> totalSet = new HashSet<>();
    for (char c = '0'; c <= '9'; c++) {
        totalSet.add(c);
    }
    
  • 直接枚举元素(适合少量元素)
    如果元素数量少,可以直接枚举所有字符生成流:

    var totalSet = Stream.of('0','1','2','3','4','5','6','7','8','9')
        .collect(Collectors.toSet());
    

内容的提问来源于stack exchange,提问作者djy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 14:15:31