import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class StackBleed {
public static int check(String s) {
if (s.equals("lambda")) {
throw new IllegalArgumentException();
}
return s.length();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
// List lengths = new ArrayList();
List<String> argList = Arrays.asList(args);
Stream lengths2 = argList.stream().map((String name) -> check(name));
}
}
所以我查看了这篇文章http://www.takipiblog.com/2014/03/25/the-dark-side-of-lambda-expressions-in-java-8/并编写了类似的类,但使用JDK 8方法没有产生预期的异常。我想知道他们是否更改了JDK 8u5中的某些内容?
您只在流上调用非终端操作。因此,您的代码不会消耗流中的数据。它所做的只是说:“当调用终端操作时,必须使用check()方法映射字符串”。
使用
List<Integer> transformed =
argList.stream().map((String name) -> check(name)).collect(Collectors.toList());
例如,然后对的调用collect()
(即终端操作)将触发流元素上的迭代及其元素的转换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句