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

如何使用Java streams遍历int数组提取char数组对应元素实现原有循环功能?

Java Stream 实现方案

1. 完全对齐原循环逻辑的写法

这种写法和你现有for循环的执行逻辑、输出效果完全一致,直接把int位置数组转为IntStream后遍历取值打印即可:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        char[] letter = {115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 119, 105, 110, 100, 103, 32 };
        int[] pos = {0,1,2,3,4,5,6,7,8,9,10,5,11,16,12,0,16,4,12,13,15};

        Arrays.stream(pos)
              .forEach(p -> System.out.print(letter[p]));
    }
}

2. 拼接为完整字符串输出的优化写法

如果需要减少IO调用次数、或者后续需要使用拼接后的结果,可以先把所有字符收集为字符串再输出:

import java.util.Arrays;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        char[] letter = {115, 116, 97, 99, 107, 111, 118, 101, 114, 102, 108, 119, 105, 110, 100, 103, 32 };
        int[] pos = {0,1,2,3,4,5,6,7,8,9,10,5,11,16,12,0,16,4,12,13,15};

        String result = Arrays.stream(pos)
                .mapToObj(p -> String.valueOf(letter[p]))
                .collect(Collectors.joining());
        System.out.println(result);
    }
}

说明

  • letter数组可以在lambda表达式中直接访问,因为它属于有效不可变变量,代码中没有对它进行二次赋值,符合Java lambda的变量捕获规则。
  • 两种实现的异常行为和原for循环完全一致:如果pos数组中存在超出letter数组下标范围的数值,会抛出ArrayIndexOutOfBoundsException。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:48:03