Java 第一次尝试在lambda
我试图制作我的第一个lambda示例,但是我无法让这个简单的代码工作Java 第一次尝试在lambda,java,lambda,java-8,Java,Lambda,Java 8,我试图制作我的第一个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", "Mich
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();
}
}
您的项目中没有使用Java8。它在Java8中编译得很好。但是,这一行中有一个bug:
return (String[]) filteredNames.toArray();
如果要返回数组,请将return语句更改为
return filteredNames.toArray(new String[filteredNames.size()]);
您的项目中没有使用Java8。它在Java8中编译得很好。但是,这一行中有一个bug:
return (String[]) filteredNames.toArray();
如果要返回数组,请将return语句更改为
return filteredNames.toArray(new String[filteredNames.size()]);
下面是使用Java8编译时可以使用的代码。请注意,您的所有错误都与Java 8功能无关:
public class Lambda {
public static void main(String[] args) {
final String[] names = {"Wim", "Kian", "Dirk", "Emmanuel", "Frank", "Michael", "Anna", "Damien", "Alberto"};
final String[] filteredNames = getNamesWithCriteria(names, (String s) -> s.startsWith("A"));
}
// changed method to be static
private static 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);
}
}
// proper conversion to String[]
return filteredNames.toArray(new String[filteredNames.size()]);
}
}
公共类Lambda{
公共静态void main(字符串[]args){
最后一个字符串[]name={“Wim”、“Kian”、“Dirk”、“Emmanuel”、“Frank”、“Michael”、“Anna”、“Damien”、“Alberto”};
最终字符串[]filteredNames=getNamesWithCriteria(名称,(字符串s)->s.startsWith(“A”);
}
//将方法更改为静态
私有静态字符串[]getNamesWithCriteria(最终字符串[]名称,谓词){
final ArrayList filteredNames=新ArrayList();
for(字符串名称:名称){
if(谓词测试(名称)){
filteredNames.add(名称);
}
}
//正确转换为字符串[]
返回filteredNames.toArray(新字符串[filteredNames.size()]);
}
}
以下是使用Java 8编译时可以使用的代码。请注意,您的所有错误都与Java 8功能无关:
public class Lambda {
public static void main(String[] args) {
final String[] names = {"Wim", "Kian", "Dirk", "Emmanuel", "Frank", "Michael", "Anna", "Damien", "Alberto"};
final String[] filteredNames = getNamesWithCriteria(names, (String s) -> s.startsWith("A"));
}
// changed method to be static
private static 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);
}
}
// proper conversion to String[]
return filteredNames.toArray(new String[filteredNames.size()]);
}
}
公共类Lambda{
公共静态void main(字符串[]args){
最后一个字符串[]name={“Wim”、“Kian”、“Dirk”、“Emmanuel”、“Frank”、“Michael”、“Anna”、“Damien”、“Alberto”};
最终字符串[]filteredNames=getNamesWithCriteria(名称,(字符串s)->s.startsWith(“A”);
}
//将方法更改为静态
私有静态字符串[]getNamesWithCriteria(最终字符串[]名称,谓词){
final ArrayList filteredNames=新ArrayList();
for(字符串名称:名称){
if(谓词测试(名称)){
filteredNames.add(名称);
}
}
//正确转换为字符串[]
返回filteredNames.toArray(新字符串[filteredNames.size()]);
}
}
A您确定要用Java 8编译代码吗?您可能正在运行JDK 8,但我打赌源代码级别设置为8之前。设置javac-source 1.8-target 1.8
。现在,它需要结束强制转换(String)
。除了您可能没有在Java 8中编译代码之外,您还从静态上下文调用了非静态方法getNamesWithCriteria。a您确定要在Java 8中编译代码吗?您可能正在运行JDK 8,但我打赌源代码级别设置为8之前。设置javac-source 1.8-target 1.8
。现在,它期望强制转换(String)
结束。除了您可能不是在Java 8中编译代码之外,您还从静态上下文调用了非静态方法getNamesWithCriteria。好吧,奇怪。我做了java版本,上面写着1.8。但是当我做javac版本时,它说的是1.7。这怎么可能?你安装了两个JDK吗?好的,这就是原因:H:\>where java C:\ProgramData\Oracle\java\javapath\java.exe C:\Windows\System32\java.exe C:\Program Files\java\ibm\U sdk70\bin\java.exe H:\>where javac:\Program Files\java\ibm\U sdk70\bin\javac.exe。我做了java版本,上面写着1.8。但是当我做javac版本时,它说的是1.7。这是怎么可能的?您安装了两个JDK吗?好的,这就是原因:H:\>where java C:\ProgramData\Oracle\java\javapath\java.exe C:\Windows\System32\java.exe C:\Program Files\java\ibm\U sdk70\bin\java.exe H:\>where javac:\Program Files\java\ibm\U sdk70\bin\javac.exe谢谢。最大的问题是有多个JDK。最大的问题是有多个JDK。