Java 打印从列表返回的最大值

Java 打印从列表返回的最大值,java,Java,我需要的方法,将返回最高工资的人。我不能使用void方法 private void persons() { persons = new ArrayList<>(); persons.add(new Employee("Pa", "Ko", 2500)); persons.add(new Employee("Ku", "No", 5000)); persons.add(new

我需要的方法,将返回最高工资的人。我不能使用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 ;

您的流几乎可以,因为它返回可选的,然后您需要一个get来确保返回Person对象,而不是可选的

或者,正如Alex在评论中所说,使用orElse来避免例外情况

因此,您可以在方法中使用这一行:

公众人士最佳薪酬名单{ return persons.stream.maxComparator.ComparingInterperson::getSalary.get; } 或使用orElse:

此外,您的代码失败可能是一个输入错误,因为您返回的是Person,那么Person是什么?您必须返回流的结果

要输出对象,您可以调用如下方法:

System.out.println("BestPayed = "+bestPayed(persons));
@Override
public String toString() {
    return "Person [name=" + name + ", surname=" + surname + ", salary=" + salary + "]";
}
并在Person类中添加一个toString方法。此方法将对象作为字符串输出,具体取决于类的属性

例如,假设你的班级有名字、姓氏和薪水,你的toString可能是这样的:

System.out.println("BestPayed = "+bestPayed(persons));
@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());

为什么它们是不同类的可能重复?您的实例Employee和Student不同,最好使用相同的实例,并在每个类角色的属性中定义人员。这是否回答了您的问题?您需要返回persons.stream.maxComparator.ComparingTPerson::getSalary而不是Person。@geobreze您的代码与我的代码类似,但它仍然只打印进程结束,退出代码为0。最好使用orElse而不是get,因为如果列表为空,它将返回Optional.empty,这将在get上引发异常。这是真的。我将补充说明。另外,在添加列表时,我假设至少存在一个值。顺便说一句,我最好从方法返回可选值,并以函数样式使用它,如BestPaydPersons.ifPresentSystem.out::println: