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

nis*_*ant 2 java java-8

我有对象的列表objList其中有两个字段ageid.agelongidString.我想迭代列表并获取列表中具有最小年龄的对象的id.我可以用传统的for循环来做,但我相信在Java 8中会有一个紧凑的解决方案.

如果我这样做objList.stream(),然后检查该流的地图功能,我只是有mapToInt,mapToLongmapToDouble.有了这些,我得到了最小年龄,但我需要具有最小年龄的物体的id.

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

eri*_*son 5

假设在列表中的元素类型MyObject,并提供存取getAge()getId(),管道应该是这样的:

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

如果你的假设是无效的,并且objList 空的,那么这将抛出IllegalArgumentException- 但这将"永远不会发生",对吧?或者,您可以返回默认值生成默认值.