使用流将char数组与另一个int数组进行交互



我想在java中使用流,比如。net中的LINQ。我有两个数组一个是字符数组,另一个是整型数组。现在我用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]);
}

我想用streams来实现。

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

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表达式中使用字母字符数组不过现在可以直接输入

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

但是输出将是

stackoverflow is king

出现差异是因为在第一个示例中,流从一个int数组开始,然后将字符转换为int。如果您想在第一个示例中显示单词,那么用

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

最新更新