java - 使用 Stream 从字符串中获取二维 char 数组

标签 java arrays java-8 java-stream chars

我即将从字符串创建二维数组:

char[][] chars;
String alphabet = "abcdefghijklmnopqrstuvwxyz";

所以数组将说明这个矩阵: enter image description here

但是我如何使用 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);
  }
}

如果我必须用流来做,我想我会做这样的事情:

IntStream.range(0, n)
    .forEach(
        i -> IntStream.range(0, n).forEach(j -> cs[i][j] = alphabet.charAt((i + j) % n)));

或者,如果我不关心创建大量中间字符串:

cs = IntStream.range(0, n)
    .mapToObj(i -> alphabet.substring(i) + alphabet.substring(0, i))
    .map(String.toCharArray())
    .toArray(new char[n][]);

一种更有趣的方式:

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

关于java - 使用 Stream 从字符串中获取二维 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47763346/

相关文章:

java - 无法在 main.java (JavaFX) 中添加 Canvas

java - '使用操作系统独立路径 project.properties 找到多个文件' android 中的错误

java - jSoup.connect(url).get() 给出错误异常 Android 应用程序

arrays - 将数组从 ActiveX 组件返回到 JavaScript

arrays - 如果已存在,则防止将 pscustomobject 添加到数组

java - 在 Java 8 中回滚()语句执行失败的最佳方法是什么?

Autocloseable 的 Java 代理(Jedis 资源)

java - 关于cql过滤器

javascript - 在网页上显示localstorage存储的数组元素

java - 按集合中的内部集合元素类型分组