使用流用另一个 int 数组迭代 char 数组

Interate over char array with another int array using streams

我想在 java 中使用流,就像在 .net 中使用 LINQ 一样。 我有两个数组,一个是 char 数组,另一个是 int 数组。 现在我用 foreach 循环循环使用两个数组打印一条消息,一个保存字符,另一个只是选择字符的位置。

代码如下:

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};

for(int s:pos){
    System.out.print(letter[s]);
}

我想用流来做这个。

我的想法是做这样的事情。

Arrays.asList(
    0,1,2,3,4,5,6,7,8,9,10,5,11,16,12,0,16,4,12,13,15
)
.stream()
.forEach(p -> p)

因此在 forEach 的 lambda 表达式中使用字母 char 数组,但现在可能会直接使用

letter[p]

您可以使用 map 并通过索引访问

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).map(x -> letter[x]).forEach(System.out::print);
}

输出:

11511697991071111181011141021081111193210511532107105110103

如果您不想创建 int[] 数组,您可以使用 Stream.of()

Stream.of(0,1,2,3,4,5,6,7,8,9,10,5,11,16,12,0,16,4,12,13,15)
      .map(x -> letter[x])
      .forEach(System.out::print);

但输出会是

Whosebug is king

之所以会出现差异,是因为在第一个示例中,流是从 int 数组开始的,随后将 chars 转换为 int。如果要显示第一个示例中的单词,则将流替换为

Arrays.stream(pos)
      .mapToObj(x -> (char) letter[x])
      .forEach(System.out::print);