这个 lambda 表达式的完整版本是什么?
What is the full version of this lambda expression?
我很难理解这个 toArray 函数。有人可以在不使用 lambda 箭头或双 ::
冒号方法参考的情况下提供此方法的完整上下文吗?
如果我知道此 toArray
代码的完整非缩短版本应该如何看待并理解程序试图做什么而不是记住某些表达式,这会更有帮助。编程素养比什么都重要。
这里的完整上下文是我正在尝试使用预设数据从另一个 class 转换流 reader。 reader 的数据被转换为 Stream<String>
方法,我的目标是将 streamData
转换为 String
数组。
public List<WordCountResult> countWordOccurrences(BufferedReader reader) throws Exception {
try {
// word, occurrences
Map<String, Integer> data = new TreeMap<>(); //TreeMap arranges items by natural order.
Stream<String> streamData = reader.lines();
String[] stringArray;
stringArray = streamData.toArray(size -> new String[size]);
}
catch(Exception ex1) {
System.out.println("Processing error.");
}
}
toArray()
接受一个 IntFunction<String[]>
-- 这是一个接收 int
大小和 returns 该大小数组的函数。非 lambda 版本如下所示:
stringArray = streamData.toArray(new IntFunction<String[]>() {
@Override String[] apply(int size) {
return new String[size];
}
});
toArray
实现了 IntFunction
接口。如果没有 lambda,它看起来像这样:
private static class MyArrayGenerator implements IntFunction<String[]> {
@Override
public String[] apply(int size) {
return new String[size];
}
}
[...]
stringArray = streamData.toArray(new MyArrayGenerator());
因为 IntFunction
是一个只有一个抽象方法的 FunctionalInterface
,您可以使用紧凑的 lambda 语法定义一个。类型将由编译器推断。
我很难理解这个 toArray 函数。有人可以在不使用 lambda 箭头或双 ::
冒号方法参考的情况下提供此方法的完整上下文吗?
如果我知道此 toArray
代码的完整非缩短版本应该如何看待并理解程序试图做什么而不是记住某些表达式,这会更有帮助。编程素养比什么都重要。
这里的完整上下文是我正在尝试使用预设数据从另一个 class 转换流 reader。 reader 的数据被转换为 Stream<String>
方法,我的目标是将 streamData
转换为 String
数组。
public List<WordCountResult> countWordOccurrences(BufferedReader reader) throws Exception {
try {
// word, occurrences
Map<String, Integer> data = new TreeMap<>(); //TreeMap arranges items by natural order.
Stream<String> streamData = reader.lines();
String[] stringArray;
stringArray = streamData.toArray(size -> new String[size]);
}
catch(Exception ex1) {
System.out.println("Processing error.");
}
}
toArray()
接受一个 IntFunction<String[]>
-- 这是一个接收 int
大小和 returns 该大小数组的函数。非 lambda 版本如下所示:
stringArray = streamData.toArray(new IntFunction<String[]>() {
@Override String[] apply(int size) {
return new String[size];
}
});
toArray
实现了 IntFunction
接口。如果没有 lambda,它看起来像这样:
private static class MyArrayGenerator implements IntFunction<String[]> {
@Override
public String[] apply(int size) {
return new String[size];
}
}
[...]
stringArray = streamData.toArray(new MyArrayGenerator());
因为 IntFunction
是一个只有一个抽象方法的 FunctionalInterface
,您可以使用紧凑的 lambda 语法定义一个。类型将由编译器推断。