我需要做一些非常簡單的事情,但我無法做到這一點。我有雙打稱爲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