首页 > 解决方案 > 从列表中打印返回最大值

问题描述

我需要返回最高薪水的人的方法。我不能使用 void 方法。

private void persons() {
    persons = new ArrayList<>();
    persons.add(new Employee("Pa", "Ko", 2500));
    persons.add(new Employee("Ku", "No", 5000));
    persons.add(new Student("Ka", "Sl", 500));

我已经尝试过这样的事情,但这不起作用:

private Person bestPayed(List<Person> persons) {
    persons.stream().max(Comparator.comparingInt(Person::getSalary));
    return Person ;

标签: java

解决方案


您的流几乎没问题,因为它返回Optional<Person>,那么您需要 aget()来确保返回Person对象,而不是可选的。

或者,正如亚历克斯在评论中所说,用于orElse避免异常。

所以你可以在方法中使用这一行:

public Person bestPayed(List<Person> persons) {
  return persons.stream().max(Comparator.comparingInt(Person::getSalary)).get();
}

或使用orElse

public Person bestPayed(List<Person> persons) {
  return persons.stream().max(Comparator.comparingInt(Person::getSalary)).orElse(null);
}

更好地使用orElse(),因为如果你的列表是空的,那么Optional<Person>也将是空的,尝试get()它会抛出一个异常:

java.util.NoSuchElementException: No value present

您的代码也失败了(可能是错字),因为您正在返回Person,而且,Person 是什么?您必须返回流的结果。

要输出对象,您可以像这样调用方法:

System.out.println("BestPayed = "+bestPayed(persons));

并在你的类中添加一个toString()方法。Person此方法是将对象输出为字符串,具体取决于您的类具有哪些属性。

例如,假设你的班级有,name你可能是这样的:surnamesalarytoString()

@Override
public String toString() {
    return "Person [name=" + name + ", surname=" + surname + ", salary=" + salary + "]";
}

但是您可以添加或删除要输出的内容。

运行此代码,控制台输出为:

BestPayed = Person [name=Ku, surname=No, salary=5000]

此外,如果您只想显示薪水,请使用以下命令:

System.out.println("Best salary = "+bestPayed(persons).getSalary());

推荐阅读