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

Java中IntStream的.distinct()作用机制及原字符串不变问题咨询

现象原因

核心原因是Java的字符串不可变特性 + Stream操作不会修改原始数据源,具体可以拆分为3点:

  • Java 中String是不可变类,一旦完成初始化,字符串对象内部的字符序列就永远无法被修改,任何针对字符串的转换、处理逻辑,都只会生成新的对象/数据副本,不会改动原有字符串的内容。
  • Stream 的所有中间操作(你代码中用到的distinct()、mapToObj()都属于中间操作)设计上就是无副作用的,只会在流的内部处理链路中对元素做转换、过滤、去重,完全不会修改生成流的原始数据源,也就是你这里的字符串a。
  • 你的全量代码中没有对变量a做任何重新赋值操作,流执行结束后,变量a仍然指向原始的"dcbba"字符串对象,调用System.out.println(a)自然会输出原始的带重复字符的内容。

如果需要拿到去重后的字符串,可以在流的末尾新增收集操作,赋值给新的变量即可,示例如下:

// 收集去重后的字符生成新字符串,原a不变
String distinctStr = a.chars()
                .distinct()
                .mapToObj(c -> (char) c)
                .collect(Collectors.joining());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 14:45:04