我想在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);