无法在流中的 forEach 循环内打印 java
Cannot print inside forEach loop in stream java
“组合”方法应该对输入数组进行组合。我喜欢得到这个组合流并将其保存到文件中。
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 {
;
}
我的代码有什么问题?请帮助我。
您的组合方法似乎存在一些问题,这些问题对您的情况没有帮助,因为您递归调用它时只生成一个新的结果数组。相反,尝试更好的组合方法 - 理想情况下为此使用经过良好测试的库,如 apache commons 或 guava。
public static List<String[]> makePairsFromArray(String[] arr) {
List<String[]> list = new ArrayList<>();
for(int i = 0; i < arr.length - 1; i++) {
for(int j = i + 1; j < arr.length; j++) {
String[] pair = new String[2];
pair[0] = arr[i];
pair[1] = arr[j];
list.add(pair);
String[] opp = new String[2];
opp[0] = arr[j];
opp[1] = arr[i];
list.add(opp);
}
}
return list;
}
此外,您需要按照 talex 的描述更新 map(join)
方法调用。
String.join
是一个静态方法,它接受两个参数:分隔符和元素数组。
您未传递任何元素,因此结果为空字符串。
正确的代码是:
combination(arr, 2, 0, new String[2])
.stream()
.map(a->String.join(" -> ", a))
.forEach(out::print);
“组合”方法应该对输入数组进行组合。我喜欢得到这个组合流并将其保存到文件中。
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 {
;
}
我的代码有什么问题?请帮助我。
您的组合方法似乎存在一些问题,这些问题对您的情况没有帮助,因为您递归调用它时只生成一个新的结果数组。相反,尝试更好的组合方法 - 理想情况下为此使用经过良好测试的库,如 apache commons 或 guava。
public static List<String[]> makePairsFromArray(String[] arr) {
List<String[]> list = new ArrayList<>();
for(int i = 0; i < arr.length - 1; i++) {
for(int j = i + 1; j < arr.length; j++) {
String[] pair = new String[2];
pair[0] = arr[i];
pair[1] = arr[j];
list.add(pair);
String[] opp = new String[2];
opp[0] = arr[j];
opp[1] = arr[i];
list.add(opp);
}
}
return list;
}
此外,您需要按照 talex 的描述更新 map(join)
方法调用。
String.join
是一个静态方法,它接受两个参数:分隔符和元素数组。
您未传递任何元素,因此结果为空字符串。
正确的代码是:
combination(arr, 2, 0, new String[2])
.stream()
.map(a->String.join(" -> ", a))
.forEach(out::print);