当对象列表中另一个字段最小时,Java 8 获取对象的一个​​字段

标签 java java-8

我有对象列表objList,其中有两个字段ageidagelongidString。我想迭代列表并获取列表中年龄最小的对象的 id。我可以使用传统的 for 循环来完成此操作,但我确信 java 8 中会有一个紧凑的解决方案。

如果我执行 objList.stream() 然后检查该流上的 map 函数,我只有 mapToIntmapToLongmapToDouble。通过这些,我得到了最短年龄,但我需要具有最短年龄的对象的 ID。

保证列表不会为空并且至少有一个对象。

最佳答案

假设列表中的元素为 MyObject 类型,并提供访问器 getAge()getId(),管道将看起来像这样:

String id = objList.stream()
  .min(Comparator.comparingLong(MyObject::getAge))
  .map(MyObject::getId)
  .orElseThrow(IllegalArgumentException::new);

如果您的假设无效,并且 objList 为空,则会抛出 IllegalArgumentException,但这“永远不会发生”,对吧?或者,您可以返回 default valuegenerate one.

关于当对象列表中另一个字段最小时,Java 8 获取对象的一个​​字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44711213/

相关文章:

java - 在 ant build 中排除文件

java - 应用程序主题(操作栏)不尊重您的空间

Java 8 流首先调用 forEach(...)

java - 为什么这个在 Java 7 中编译而不在 Java 8 中编译?

java-8 - 如何在 Java 8 中使用流在 List 的实例中转换元素?

java - 为什么 JCF 接口(interface)中的许多方法在 Java 8 中没有成为默认值?

Java 8 : Merging two Lists containing objects by key

java - spring mvc Junit 使用mockito作为post方法

java - Amazon S3 java sdk - 下载进度

java - 如何防止 Java 8/Tomcat 7 对 Response.sendRedirect 上的 URL 路径进行 URL 编码