【问题标题】:Java 8 Lambda stack bleedJava 8 Lambda 堆栈出血
【发布时间】:2014-05-28 09:46:46
【问题描述】:
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 中的某些内容?

【问题讨论】:

    标签: java


    【解决方案1】:

    您只是在流上调用非终端操作。因此,您的代码不会使用流中的数据。它所做的只是说:“当调用终端操作时,您必须使用 check() 方法映射字符串”。

    使用

    List<Integer> transformed = 
        argList.stream().map((String name) -> check(name)).collect(Collectors.toList());
    

    例如,然后调用collect(),这是一个终端操作,将触发对流元素的迭代及其元素的转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-11
      • 2015-03-31
      • 2015-10-19
      • 2015-08-03
      • 1970-01-01
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多