我有一个代码有两种不同的方法,但其中一种是工作而另一种没有被编译,我没有弄错。 这是代码:
public class CollectorOperations {
public int averageAgeInt(List<Person> persons) {
return persons.stream()
.collect(Collectors.averagingInt(person -> person.getAge()));
}
public double averageAgeDouble(List<Person> personList, int i) {
return personList.stream()
.collect(Collectors.averagingInt(person -> person.getAge()));
}
}
class Person {
private String name;
private String lastName;
private int age;
public Person(String name, String lastName) {
this.name = name;
this.lastName = lastName;
}
public Person(String name, String lastName, int age) {
this.name = name;
this.lastName = lastName;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", lastName='" + lastName + '\'' +
'}';
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
这两个方法之间的唯一区别是返回类型,当返回类型为int
时,我无法从lambda表达式获取person.age()
,但当我将返回类型更改为double
时,它是工作
P.S。 对不起我的英文。
答案 0 :(得分:3)
由于类型不匹配,它没有编译:
Double#intValue()
该操作返回Double类型的对象,但您的方法被定义为返回一个整数。
原因是Double对象不能转换为int,但由于这是一个Double对象,因此可以获取调用方法return persons.stream().collect(Collectors.averagingInt(person -> person.getAge())).intValue();
的整数值
您需要执行类似
的操作int i
我不明白为什么你在方法 averageAgeDouble (从不使用变量)中有参数public int averageAgeInt(List<Person> persons) {
return (int) averageAgeDouble(persons);
}
public double averageAgeDouble(List<Person> personList) {
return personList.stream().collect(Collectors.averagingInt(person -> person.getAge()));
}
,所以你可以定义一个更优雅的方法,如果你摆脱变量:
{{1}}