如何用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
相关产品推荐
相关产品推荐

