java - 无法在流 java 中的 forEach 循环内打印
问题描述
“组合”方法应该组合输入数组。我喜欢得到这个组合流并将其保存到一个文件中。
public void writeDot() {
try (PrintStream out = new PrintStream(path, "UTF-8")) {
out.print("digraph {\n");
String[] arr = {"hyo", "ji", "yoo", "mi", "vi", "se", "ari"};
combination(arr, 2, 0, new String[2])
.stream()
.map(a -> Arrays.toString(a).join(" -> "))
.forEach(out::print);
out.println(";\n");
out.println("}");
} catch (IOException ioException) {
ioException.printStackTrace();
}
}
组合方法是这样的:
public List<String[]> combination(String[] arr, int len, int startPosition, String[] result) {
if (len == 0) {
//System.out.println(Arrays.toString(result));
return null;
}
for (int i = startPosition; i <= arr.length - len; i++) {
result[result.length - len] = arr[i];
combination(arr, len - 1, i + 1, result);
list.add(result);
}
return list;
}
我预期的结果是:
digraph {
hyo -> ji;
ji -> hyo;
and so on..
}
但我只得到:
digraph {
;
}
我的代码有什么问题?请帮我。
解决方案
String.join
是一个静态方法,它接受两个参数:分隔符和元素数组。
你没有传递任何元素,所以结果是空字符串。
正确的代码是:
combination(arr, 2, 0, new String[2])
.stream()
.map(a->String.join(" -> ", a))
.forEach(out::print);
推荐阅读
- c++ - 从单词中获取第一个字符并根据任何条件替换为 *
- angular - 在 forkjoin TS 中使用 await
- ios - 如何从设置中更改应用程序的字体?
- php - getAllKeys() 不返回所有键
- lua - Lua Love2D 错误:语法错误:main.lua:1: '=' 预期
- java - 是否可以检查 Dialog 在活动中是否可见?
- jenkins - 在 Jenkins 中构建远程多分支管道
- php - 如何在 SQL 中获得最低的唯一出价
- data-visualization - 是否有免费的物联网设备地图和 GPS 记录器服务?(如 Azure IoT Central 中的 Azure Maps)
- vue.js - 使用 axios 将 vue.js 数据对象发送到后端