ken*_*ken 0 java lambda netbeans java-8
我正在检查一些简单的Lambda表达式,我在互联网上找到了以下示例,该示例应该可行.
可惜的是,它似乎的NetBeans 8.0.1不喜欢行的代码 (Person p) -> p.getAge() < 18)
和.map((Person p) -> p.getName())
显示错误"lambda表达式中的不兼容参数类型".
任何人都有一个想法如何纠正这个问题?
public class Lambda {
private enum Gender {
MALE, FEMALE
};
public static class Person {
private final String name;
private final int age;
private final Gender gender;
public Person(String name, int age, Gender gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public Gender getGender() {
return gender;
}
}
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("angelo", 50, Lambda.Gender.MALE));
persons.add(new Person("paolo", 10, Lambda.Gender.MALE));
persons.add(new Person("giuseppe", 5, Lambda.Gender.MALE));
persons.add(new Person("andrea", 22, Lambda.Gender.FEMALE));
persons.add(new Person("guglielmo", 2, Lambda.Gender.FEMALE));
printNames(persons,
(Person p) -> p.getAge() < 18);
}
private static void printNames(List<Person> persons, Predicate predicate) {
persons.stream()
.filter(predicate)
.map((Person p) -> p.getName())
.sorted()
.forEach(name -> System.out.println(name));
}
}
Run Code Online (Sandbox Code Playgroud)
您的方法签名是:
private static void printNames(List<Person> persons, Predicate predicate)
Run Code Online (Sandbox Code Playgroud)
因此,Predicate
当你传入时,预计会有Predicate<Person>
.你可以通过传入a Predicate<Object>
然后强制转换来解决这个问题,这不是最好的:
printNames(.., p -> ((Person) p).getAge() < 18);
Run Code Online (Sandbox Code Playgroud)
或者只需更改方法签名即可处理Predicate<Person>
.
private static void printNames(List<Person> persons, Predicate<Person> predicate)
Run Code Online (Sandbox Code Playgroud)
作为旁注,您可以在代码中替换:
.map((Person p) -> p.getName())
Run Code Online (Sandbox Code Playgroud)
至:
.map(Person::getName)
Run Code Online (Sandbox Code Playgroud)
我建议你改变你的方法的签名:
private static void printNames(List<Person> persons, Predicate predicate)
Run Code Online (Sandbox Code Playgroud)
至
private static void printNames(List<Person> persons, Predicate<Person> predicate)
Run Code Online (Sandbox Code Playgroud)
您Stream<Person>
在该方法中创建的内容需要使用Predicate<Person>
该filter
方法.
归档时间: |
|
查看次数: |
4184 次 |
最近记录: |