我需要做一些非常简单的事情,但我无法做到这一点。我有双打称为brightnessArray
我从HSB
(色调,亮度,饱和度)的对象的阵列中提取这样的阵列:按Java流分组到一个范围
double[] brightnessArray = Arrays.stream(hsbSourcePixelArray)
.mapToDouble(b -> b.brightness).toArray();
现在,我需要将它们分组在256个箱。我想通过写这样的事情要做到这一点:
Map<Integer, Integer> brightnessHistogram = Arrays.stream(brightnessArray)
.collect(Collectors.groupingBy(b -> b/256, Collectors.counting()));
但是,这不是在b/256
部分地方说:Operator/cannot be applied to java.lang.Object, int
编译。我不确定我是怎么做这个分组的。我在这里做错了什么?
如果亮度值是'double',那么Arrays.stream()返回一个专门的'DoubleStream'。你应该看看Javadoc的'DoubleStream',特别是它专门的'collect'方法,它可以做你想做的事情。我没有时间写一个完整的答案,所以这只是一个暗示,让你朝着正确的方向前进。一旦你解决了问题,如果没有人写下答案,请自己写下来,我会加快解决。 –
如果没有明确的类型转换,则不能将'double'转换为'Integer'。这是一条基本规则,与lambda表达式或Streams根本无关。既然你也想使用'Stream.collect(Collector)',你必须在中间使用'.mapToObj(b - >(int)b)'。此外,'counting()'收集到'Long',所以结果将是'Map'... –
Holger