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

时间:2017-06-23 00:20:43

标签: java java-8

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

如果我执行objList.stream()然后检查该流上的地图功能,我就会mapToIntmapToLongmapToDouble。有了这些,我得到了最小年龄,但我需要具有最小年龄的物体的id。

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

2 个答案:

答案 0 :(得分:5)

假设列表中的元素属于MyObject类型,并提供访问者getAge()getId(),那么管道将如下所示:

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

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

答案 1 :(得分:3)

objList.stream()
        .min(Comparator.comparingLong(MyObj::getAge))
        .orElseThrow(AssertionError::new)
        .getId()