Ich muss etwas sehr einfaches tun, aber ich bin nicht in der Lage, es zu tun. Ich habe ein Array von Doppel genannt brightnessArray
, die ich von einer Reihe von HSB
(Farbton, Helligkeit, Sättigung) Objekt wie folgt extrahiert haben:Gruppierung nach in einem Bereich in Java-Streams
double[] brightnessArray = Arrays.stream(hsbSourcePixelArray)
.mapToDouble(b -> b.brightness).toArray();
Nun muß ich gruppiert sie in 256 Behältern. Ich versuche, dies zu tun, indem sie so etwas wie dieses schreiben:
Map<Integer, Integer> brightnessHistogram = Arrays.stream(brightnessArray)
.collect(Collectors.groupingBy(b -> b/256, Collectors.counting()));
Aber dies ist nicht der b/256
Teil kompilieren, wo es heißt Operator/cannot be applied to java.lang.Object, int
.
Ich bin mir nicht sicher, wie ich diese Gruppierung mache. Was mache ich hier falsch?
Wenn Helligkeitswerte "double" sind, gibt 'Arrays.stream()' einen speziellen 'DoubleStream' zurück. Sie sollten sich das Javadoc für 'DoubleStream' anschauen und vor allem seine spezialisierte Methode' collect', die genau das macht, was Sie wollen. Ich habe keine Zeit, eine vollständige Antwort zu schreiben, also ist dies nur ein Hinweis, um dich in die richtige Richtung zu bringen. Sobald Sie es gelöst haben, wenn niemand eine Antwort geschrieben hat, schreiben Sie es selbst und ich werde es aufwerten. –
Ohne eine explizite Typumwandlung können Sie 'double' in' Integer' nicht umwandeln. Das ist eine Grundregel, die sich nicht auf Lambda-Ausdrücke oder Streams bezieht. Da Sie auch 'Stream.collect (Collector)' verwenden wollen, müssen Sie '.mapToObj (b -> (int) b)' dazwischen verwenden. Außerdem wird 'counting()' zu 'Long' gesammelt, also wäre das Ergebnis' Map '... –
Holger