假设我有一个包含元素的列表(34, 11, 98, 56, 43)
.
使用 Java 8 流,如何找到列表中最小元素的索引(例如本例中为 1)?
我知道这可以在 Java 中轻松完成list.indexOf(Collections.min(list))
。然而,我正在寻找类似 Scala 的解决方案,我们可以简单地说List(34, 11, 98, 56, 43).zipWithIndex.min._2
得到最小值的索引。
是否可以使用流或 lambda 表达式(例如 Java 8 特定功能)来实现相同的结果。
注意:这仅用于学习目的。我使用时没有任何问题Collections
实用方法。
import static java.util.Comparator.comparingInt;
int minIndex = IntStream.range(0,list.size()).boxed()
.min(comparingInt(list::get))
.get(); // or throw if empty list
正如@TagirValeev 在中提到的他的回答 https://stackoverflow.com/a/31116669/3920048,你可以通过使用来避免拳击IntStream#reduce
代替Stream#min
,但代价是掩盖了意图:
int minIdx = IntStream.range(0,list.size())
.reduce((i,j) -> list.get(i) > list.get(j) ? j : i)
.getAsInt(); // or throw
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)