使用 Collectors.averagingInt java 从列表中获取平均数据
Getting average data from list using Collectors.averagingInt java
我的代码有两种不同的方法,但其中一种有效,另一种未编译,我不明白哪里出了问题。
这是代码:
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;
}
}
这两种方法唯一的区别是return类型,当return类型是int
时,我无法从lambda表达式中得到person.age()
,但是当我将 return 类型更改为 double
它正在工作。
P.S。
对不起我的英语。
这里由于类型不匹配而没有编译:
persons.stream().collect(Collectors.averagingInt(person -> person.getAge()));
该操作 return 是一个 Double 类型的对象,但您的方法被定义为 return 一个整数。
原因是Double对象不能转成int,但既然是Double对象,调用方法就可以得到整型值Double#intValue()
你需要做类似
的事情
return persons.stream().collect(Collectors.averagingInt(person -> person.getAge())).intValue();
我不明白为什么你在方法 averageAgeDouble 中有一个参数 int i
(变量从未被使用过),所以你可以定义一个更优雅的方式如果你摆脱那个变量:
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()));
}
我的代码有两种不同的方法,但其中一种有效,另一种未编译,我不明白哪里出了问题。 这是代码:
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;
}
}
这两种方法唯一的区别是return类型,当return类型是int
时,我无法从lambda表达式中得到person.age()
,但是当我将 return 类型更改为 double
它正在工作。
P.S。 对不起我的英语。
这里由于类型不匹配而没有编译:
persons.stream().collect(Collectors.averagingInt(person -> person.getAge()));
该操作 return 是一个 Double 类型的对象,但您的方法被定义为 return 一个整数。
原因是Double对象不能转成int,但既然是Double对象,调用方法就可以得到整型值Double#intValue()
你需要做类似
的事情return persons.stream().collect(Collectors.averagingInt(person -> person.getAge())).intValue();
我不明白为什么你在方法 averageAgeDouble 中有一个参数 int i
(变量从未被使用过),所以你可以定义一个更优雅的方式如果你摆脱那个变量:
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()));
}