You need to enable JavaScript to run this app. 能否通过BufferedReader直接接收值存入List?有无类似数组的单行初始化方案
优惠活动
大模型
产品
解决方案
定价
更多

能否通过BufferedReader直接接收值存入List?有无类似数组的单行初始化方案

用BufferedReader结合Stream API一步初始化List的实现

完全可以做到和现有数组初始化风格完全匹配的链式写法,不需要额外手动遍历、循环add元素,从输入读取到List初始化的全流程可以在单次流调用中完成。

通用实现逻辑

和你现有int数组的读取链路完全复用,仅在流的收尾环节做小调整:

  • 复用已有流程:通过br.readLine()读入整行输入、trim()去除首尾空白、按\\s+分割为多段独立字符串
  • 复用类型转换逻辑:通过Integer::parseInt将每段字符串转换为整型数值
  • 替换收尾逻辑:不再调用toArray()生成数组,而是通过流收集器直接生成目标List
    对应整型List的完整可运行代码:
List<Integer> numList = Arrays.stream(br.readLine().trim().split("\\s+"))
        .mapToInt(Integer::parseInt)
        .boxed()
        .collect(Collectors.toList());

关键步骤说明

  • boxed()的作用是把原始类型的IntStream转换为对象类型的Stream<Integer>,衔接后续的对象收集逻辑,不需要手动完成int到Integer的装箱转换
  • collect(Collectors.toList())会自动把流中的所有元素汇总为List实例,全程没有手动循环添加元素的步骤,和你现有数组初始化的编码习惯完全一致。

常见场景适配

  • 如果需要拿到支持增删改的可变ArrayList,而非JDK默认返回的不可变List实现,可以把最后一行收集逻辑替换为:
.collect(Collectors.toCollection(ArrayList::new))
  • 如果不需要类型转换,仅需要把分割后的原始字符串直接存入List,写法会更简洁,连类型转换的步骤都可以省略:
List<String> strList = Arrays.stream(br.readLine().trim().split("\\s+"))
        .collect(Collectors.toList());

你给出的示例代码存在两处会导致编译报错的笔误,实际使用时需要修正:trim()是带执行括号的方法调用,不要漏写括号;mapToInt的正确驼峰拼写为mapToInt,不要全小写写成maptoInt。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 01:57:05