我正在玩一些新的Java 8流功能。但我对下面的示例代码有一个奇怪的问题。
import java.util.ArrayList;
import java.util.function.IntFunction;
public class TwoDArrayTest {
public static void main(String[] args) {
ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
ArrayList<String> row1 = new ArrayList<String>(2);
row1.add("11");
row1.add("12");
ArrayList<String> row2 = new ArrayList<String>(2);
row2.add("21");
row2.add("22");
matrix.add(row1);
matrix.add(row2);
String[][] array = toArray(matrix, String[]::new, String[][]::new);
for (String[] row : array) {
for (String s : row) {
System.out.print(s + " ");
}
System.out.print("\n");
}
}
public static String[][] toArray(ArrayList<ArrayList<String>> matrix,
IntFunction<String[]> arrayCreator, IntFunction<String[][]> doubleCreator) {
String[][] array = matrix.stream()
.map(row -> row.stream().toArray(arrayCreator))
.toArray(doubleCreator);
return array;
}
}
我可以在命令行上使用maven来构建它,但Eclipse一直显示错误,行.toArray(doubleCreator)
说
The method toArray(IntFunction<A[]>) in the type Stream<String[]> is not
applicable for the arguments (IntFunction<String[][]>)
奇怪的是,我甚至可以在使用maven构建时从eclipse运行应用程序。代码是我作为maven项目导入Eclipse的项目的一部分。我试图确保Eclipse和命令行maven使用相同版本的java和maven,但问题仍然存在。我正在使用Eclipse Oxygen,maven 3.5.0和java 1.8.0_121。
任何想法可能会出错?