我一直在使用Java 8的lambdas和流,因为我的硕士学位项目和我注意到一些在互联网上没有广泛讨论的东西.我正在使用Netbeans进行开发,并且多次建议改变"老式"风格,转而使用这两种新构造器.但我想知道这些建议是否真的有用.要点是:
也许是一个习惯问题,但如果你使用嵌套的lambdas,它可能成为了解发生了什么的噩梦.
由于Netbeans的建议,我们倾向于将for循环更改为流的foreach调用,但是在可测试性方面存在微妙但非常危险的副作用.如果你的代码在foreach块中失败,那么IDE(实际上是编译器)根本不知道错误发生在哪一行,指向块的开始.此外,调试代码更加困难,因为我们无法控制计算和内部循环.
同样,IDE总是建议将累积更改为一种map reduce算法.后者看起来更复杂,所以我创建了一个简单的测试来检查这种方法有多好.惊喜,它慢得多!
那是代码:
public class Java8Kata {
public static void main(String[] args) {
System.out.println("Generating random numbers...");
final Collection<Number> numbers = getRandomNumbers();
System.out.println("Starting comparison...");
for (int i = 0; i < 20; i++) {
getTotalConventionalStyle(numbers);
getTotalNewStyle(numbers);
}
}
public static void getTotalConventionalStyle(Collection<Number> numbers) {
long startTime = System.nanoTime();
System.out.println("\n\nstarting conventional...");
double total = 0;
for (Number number : numbers) {
total += number.doubleValue();
}
System.out.println("total = " + total);
System.out.println("finish conventional:" + …Run Code Online (Sandbox Code Playgroud)