从 Java / IntelliJ 中的控制台输出中删除 "Optional[...]"
Remove "Optional[...]" from a Console OutPrint in Java / IntelliJ
我正在学习编程,并且在 Java 中从事流媒体方面的工作。我写了一个方法,它应该 return 医生患者列表中最高的人类对象。
public static void tallestPatient(List<Human> patients) throws NullPointerException {
try {
System.out.println("Tallest patient: ");
System.out.print(patients.stream().max(Comparator.comparingInt(Human::getHeight)));
System.out.println();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
该方法本身有效。我刚刚注意到,每当我尝试打印所选对象(最高的人)的 toString() 方法时,控制台上都会有这个“可选 [...]”标签。
控制台输出:
最高的患者:
Optional[Peter为美国私人保险男性,身高约220cm]
IDE 告诉我,那是因为如果它是一个空列表,元素可能为零。试图通过考虑 NullPointerExceptions 以及 if 和 else 条件来取消它,这也没有解决问题,为什么要保留异常变体。
有人知道我可以解决什么问题吗?
你好贾斯汀
聚合函数 Stream::max
returns an Optional
和 Optional
的 toString
实现产生了我们观察到的 String
。
我们可以通过展开 Optional
来防止这种情况发生。一种可能的方法是调用 Optional::orElse
:
System.out.print(patients.stream()
.max(Comparator.comparingInt(Human::getHeight))
.orElse(null));
另一种可能性是,如果通过 Optional::ifPresent
:
存在值,则仅 print
值
patients.stream()
.max(Comparator.comparingInt(Human::getHeight))
.ifPresent(System.out::println)
关于代码的评论:捕捉 NullPointerException
的决定至少是有问题的。我建议明确执行非 null
性。
我正在学习编程,并且在 Java 中从事流媒体方面的工作。我写了一个方法,它应该 return 医生患者列表中最高的人类对象。
public static void tallestPatient(List<Human> patients) throws NullPointerException {
try {
System.out.println("Tallest patient: ");
System.out.print(patients.stream().max(Comparator.comparingInt(Human::getHeight)));
System.out.println();
} catch (NullPointerException e) {
e.printStackTrace();
}
}
该方法本身有效。我刚刚注意到,每当我尝试打印所选对象(最高的人)的 toString() 方法时,控制台上都会有这个“可选 [...]”标签。
控制台输出:
最高的患者: Optional[Peter为美国私人保险男性,身高约220cm]
IDE 告诉我,那是因为如果它是一个空列表,元素可能为零。试图通过考虑 NullPointerExceptions 以及 if 和 else 条件来取消它,这也没有解决问题,为什么要保留异常变体。
有人知道我可以解决什么问题吗?
你好贾斯汀
聚合函数 Stream::max
returns an Optional
和 Optional
的 toString
实现产生了我们观察到的 String
。
我们可以通过展开 Optional
来防止这种情况发生。一种可能的方法是调用 Optional::orElse
:
System.out.print(patients.stream()
.max(Comparator.comparingInt(Human::getHeight))
.orElse(null));
另一种可能性是,如果通过 Optional::ifPresent
:
print
值
patients.stream()
.max(Comparator.comparingInt(Human::getHeight))
.ifPresent(System.out::println)
关于代码的评论:捕捉 NullPointerException
的决定至少是有问题的。我建议明确执行非 null
性。