mas*_*ter 2 java arrays chars java-8 java-stream
我即将从字符串创建二维数组:
char[][] chars;
String alphabet = "abcdefghijklmnopqrstuvwxyz";
Run Code Online (Sandbox Code Playgroud)
但是我怎么能用Java 8 Streams做到这一点,因为我不想通过休闲循环来做到这一点?
环路不好.他们得到了如此糟糕的说唱.我怀疑基于流的解决方案会如此清晰:
int n = alphabet.length();
char[][] cs = new char[n][n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cs[i][j] = alphabet.charAt((i + j) % n);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不得不用流做,我想我会做这样的事情:
IntStream.range(0, n)
.forEach(
i -> IntStream.range(0, n).forEach(j -> cs[i][j] = alphabet.charAt((i + j) % n)));
Run Code Online (Sandbox Code Playgroud)
或者,如果我不关心创建大量的中间字符串:
cs = IntStream.range(0, n)
.mapToObj(i -> alphabet.substring(i) + alphabet.substring(0, i))
.map(String.toCharArray())
.toArray(new char[n][]);
Run Code Online (Sandbox Code Playgroud)
一种稍微有趣的方式:
char[][] cs = new char[n][];
cs[0] = alphabet.toCharArray();
for (int i = 1; i < n; ++i) {
cs[i] = Arrays.copyOfRange(cs[i-1], 1, n+1);
cs[i][n-1] = cs[i-1][0];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |