我有对象列表objList
,其中有两个字段age
和id
。 age
为 long
,id
为 String
。我想迭代列表并获取列表中年龄最小的对象的 id。我可以使用传统的 for
循环来完成此操作,但我确信 java 8 中会有一个紧凑的解决方案。
如果我执行 objList.stream()
然后检查该流上的 map 函数,我只有 mapToInt
、mapToLong
和 mapToDouble
。通过这些,我得到了最短年龄,但我需要具有最短年龄的对象的 ID。
保证列表不会为空并且至少有一个对象。
最佳答案
假设列表中的元素为 MyObject
类型,并提供访问器 getAge()
和 getId()
,管道将看起来像这样:
String id = objList.stream()
.min(Comparator.comparingLong(MyObject::getAge))
.map(MyObject::getId)
.orElseThrow(IllegalArgumentException::new);
如果您的假设无效,并且 objList
为空,则会抛出 IllegalArgumentException
,但这“永远不会发生”,对吧?或者,您可以返回 default value或generate one.
关于当对象列表中另一个字段最小时,Java 8 获取对象的一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44711213/