Mub*_*bin 13 java java-8 java-stream
说我有一个包含元素的列表(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实用程序方法时没有任何问题.
Mis*_*sha 20
import static java.util.Comparator.comparingInt;
int minIndex = IntStream.range(0,list.size()).boxed()
.min(comparingInt(list::get))
.get(); // or throw if empty list
Run Code Online (Sandbox Code Playgroud)
正如@TagirValeev在他的回答中提到的,你可以通过使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13290 次 |
| 最近记录: |