我有对象列表objList
,其中包含两个字段age
和id
。 age
为long
,id
为String
。我想迭代列表并获取列表中具有最小年龄的对象的id。我可以使用传统的for
循环来完成它,但我相信在Java 8中会有一个紧凑的解决方案。
如果我执行objList.stream()
然后检查该流上的地图功能,我就会mapToInt
,mapToLong
和mapToDouble
。有了这些,我得到了最小年龄,但我需要具有最小年龄的物体的id。
保证列表不会为空,并且至少有一个对象。
答案 0 :(得分:5)
假设列表中的元素属于MyObject
类型,并提供访问者getAge()
和getId()
,那么管道将如下所示:
String id = objList.stream()
.min(Comparator.comparingLong(MyObject::getAge))
.map(MyObject::getId)
.orElseThrow(IllegalArgumentException::new);
如果您的假设无效,并且objList
为空,则会抛出IllegalArgumentException
- 但这将“永远不会发生”,对吧?或者,您可以返回default value或generate one.
答案 1 :(得分:3)
objList.stream()
.min(Comparator.comparingLong(MyObj::getAge))
.orElseThrow(AssertionError::new)
.getId()