我试图做出我的第一个lambda示例,但是我无法得到这个简单的代码来工作。首先尝试lambda
import java.util.ArrayList;
import java.util.function.Predicate;
public class Lambda {
public static void main(String[] args) {
final String[] names = {"Wim", "Kian", "Dirk", "Emmanuel", "Frank", "Michaël", "Anna", "Damien", "Alberto"};
final String[] filteredNames = getNamesWithCriteria(names, (String s) -> s.startsWith("A"));
}
private String[] getNamesWithCriteria(final String[] names, Predicate<String> predicate) {
final ArrayList<String> filteredNames = new ArrayList<>();
for(String name : names) {
if(predicate.test(name)) {
filteredNames.add(name);
}
}
return (String[]) filteredNames.toArray();
}
}
这是我得到的错误:
Lambda.java:8: error: ')' expected
final String[] filteredNames = getNamesWithCriteria(names, (String s) ->
s.startsWith("A"));
^
Lambda.java:8: error: illegal start of expression
final String[] filteredNames = getNamesWithCriteria(names, (String s) ->
s.startsWith("A"));
^
Lambda.java:8: error: ';' expected
final String[] filteredNames = getNamesWithCriteria(names, (String s) ->
s.startsWith("A"));
一个你确定你编译代码Java中8? – Eran 2014-10-10 12:37:09
您可能正在运行JDK 8,但我敢打赌,源代码级别是在8之前设置的。设置'javac -source 1.8 -target 1.8'。它现在期待一个强制转换'(String)'的结束。 – 2014-10-10 12:40:08
除了你不可能在Java 8中编译你的代码,你还从静态上下文中调用了非静态方法getNamesWithCriteria。 – 2014-10-10 12:41:48