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 Student("Ka", "Sl", 500));
我已经尝试过这样的事情,但这不起作用:
private Person bestPayed(List<Person> persons) {
persons.stream().max(Comparator.comparingInt(Person::getSalary));
return Person ;
解决方案
您的流几乎没问题,因为它返回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
你可能是这样的:surname
salary
toString()
@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());
推荐阅读
- agora.io - Agora 本地流停止,但视频图标仍显示在浏览器 URL 选项卡中
- python - 您的 SQL 语法有错误;用蟒蛇
- javascript - 使用reduce时出现此错误“未捕获的类型错误:a不可迭代”
- javascript - 如何在 PHP / Javascript 中的 cookie 过期前一分钟提醒用户?
- c# - 使用没有通用参数的表达式树创建对象
- android - google_maps_flutter 在某些 Android 模拟器和设备上显示空白地图
- amazon-web-services - 域名服务器不变
- django - 如何让 Django ModelForm 接受特定格式的日期(或转换为可接受的格式)?
- html - 在反应js中提交表单后设置状态
- flutter - 模仿 iOS 联系表单 AppBar