Aph*_*hex 2 java java-8 java-stream
我有一组整数,我想计算max()我的流包含的整数数量.该max()方法来自Stream API.
我想要这样的事情
int count = Arrays.stream(myIntArray)
.filter(i -> i == max())
.count();
System.out.printf("Count: %d", count);
Run Code Online (Sandbox Code Playgroud)
我无法max()从我的forEach()方法中调用该方法,因为这不是Streams的功能 - 所以我该怎么做才能使它工作?
Lou*_*man 10
你不能做这样的事情,不是没有很多麻烦.编写所需内容的最简单方法是两个阶段:
int max = Arrays.stream(array).max().getAsInt();
int count = (int) Arrays.stream(array).filter(i -> i == max).count();
Run Code Online (Sandbox Code Playgroud)
如果你坚持一次性做,我会写一些类似的东西
int[] maxAndCount = Arrays.stream(array).collect(
() -> new int[2], // first max, then count
(maxAndCount, i) -> {
if (i > maxAndCount[0] || maxAndCount[1] == 0) {
maxAndCount[0] = i;
maxAndCount[1] = 1;
} else if (i == maxAndCount[0]) {
maxAndCount[1]++;
}
},
(maxAndCount1, maxAndCount2) -> {
if (maxAndCount1[0] < maxAndCount2[0]) {
maxAndCount1[0] = maxAndCount2[0];
maxAndCount1[1] = maxAndCount2[1];
} else if (maxAndCount1[0] == maxAndCount2[0]) {
maxAndCount1[1] += maxAndCount2[1];
}
});
int count = maxAndCount[1];
Run Code Online (Sandbox Code Playgroud)
...但老实说,简单的两阶段版本很难被击败.(坦率地说,我希望它表现得更好.)
| 归档时间: |
|
| 查看次数: |
276 次 |
| 最近记录: |