gpt4 book ai didi

Java 8 Lambda 堆栈溢出

转载 作者:行者123 更新时间:2023-12-01 18:31:39 25 4
gpt4 key购买 nike

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(),这是一个终端操作,将触发流元素的迭代及其元素的转换。

关于Java 8 Lambda 堆栈溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23908170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com