无法在流java中的foreach循环内打印

tjjdgumg  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(409)

方法“组合”应该是输入数组的组合。我想把这个组合流保存到一个文件里。

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 {
;

}

我的代码怎么了?请帮帮我。

h9a6wy2h

h9a6wy2h1#

似乎您的组合方法有一些问题,这些问题对您的案例没有帮助,因为您递归地调用它时只生成一个新的结果数组。相反,尝试一种更好的组合方法——最好使用经过良好测试的库,比如ApacheCommons或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;
}

此外,您还需要更新 map(join) talex描述的方法调用。

kyxcudwk

kyxcudwk2#

String.join 是接受两个参数的静态方法:分隔符和元素数组。
您不传递任何元素,所以结果是空字符串。
正确的代码是:

combination(arr, 2, 0, new String[2])
                .stream()
                .map(a->String.join(" -> ", a))
                .forEach(out::print);

相关问题