我正在使用Java 8,并且遇到了一个基本场景,该场景说明了catch
22,其中修复一个编译错误会导致另一个编译错误。该场景(这只是从更复杂的示例中简化而来的一个示例):
public static List<String> catch22(List<String> input) {
List<String> result = null;
if (input != null) {
result = new ArrayList<>(input.size());
input.forEach(e -> result.add(e)); // compile error here
}
return result;
}
我收到一个编译错误:
封闭范围中定义的局部变量结果必须是final或有效的final
如果我将第一行更改为:
List<String> result;
我在最后一行收到编译错误:
局部变量结果可能尚未初始化
似乎这里唯一的方法是将我的结果预先初始化为ArrayList,我不想这样做,或者不使用lambda表达式。我还有其他解决方案吗?
错误即将到来是因为您的result
列表无效final
,这是在lambda中使用它的要求。一种选择是在if
条件内部和return null;
外部声明变量。但是我认为那不是个好主意。您当前的方法无法产生任何效果。从中返回一个空列表会更有意义。
说了这么多,我要说的是,由于您正在使用Java
8,因此请Optional
在此处与流一起使用:
public static List<String> catch22(List<String> input) {
return Optional.ofNullable(input)
.orElse(new ArrayList<String>())
.stream().collect(Collectors.toList());
}
如果您想返回null
,我可能会将您的方法更改为:
public static List<String> catch22(List<String> input) {
if (input == null) return null;
return input.stream().collect(Collectors.toList());
// Or this. B'coz this is really what your code is doing.
return new ArrayList<>(input);
}
我正在玩Java 8,遇到了一个基本的场景,它展示了一个第22条军规,即修复一个编译错误会导致另一个编译错误。场景(这只是一个从更复杂的东西简化而来的例子): 我收到编译错误: 封闭范围中定义的局部变量结果必须是最终的或有效的最终结果 如果我将第一行更改为: 最后一行出现编译错误: 局部变量结果可能尚未初始化 似乎这里唯一的方法是将我的结果预先初始化为ArrayList,我不想这样做,或者不使用l
1 Java8 Lambda表达式的介绍 Lambda表达式是Java8中包含的一项新的重要功能。它提供了一种简洁明了的方式来使用表达式表示一个方法接口。在Collection集合中非常有用。它有助于集合元素的迭代,过滤和从集合中提取数据。 Lambda表达式用于提供具有功能接口的接口的实现。它节省了大量代码。在使用Lambda表达式的情况下,我们无需再次定义用于提供实现的方法。我们只编写实现代码
我最近接触了Java8,我正在尝试学习Lambda表达式。我想做一些图形计算,我的代码到目前为止: 所有这些代码都是用于图形的,除了和使用的操作之外,所有内容都是基本的数学(加、减、乘、模),并且可以单独针对每个像素执行。 现在的问题是:有可能在GPU上运行这个吗?或者这甚至是自动基于GPU的?(我记得在什么地方读到过这个,但我不确定)
我有两个地图 和 类型为
既然我有一个带有两个方法的,那么我如何用一个具体的类实现它呢?如何为这两种方法编写Lambda表达式?
本文向大家介绍Java8使用lambda表达式调用静态方法,包括了Java8使用lambda表达式调用静态方法的使用技巧和注意事项,需要的朋友参考一下 Java中的Lambda表达式允许您将功能作为参数传递给方法。您还可以使用lambda表达式调用现有的方法。 方法引用是简单的、易于阅读的lambda表达式,可以通过lambda表达式中的名称调用/引用现有的方法。可以使用方法引用引用类中定义的静态