java - 在 Java Streams 中按范围分组

标签 java group-by java-stream

我需要做一些非常简单的事情,但我做不到。我有一个名为 brightnessArray 的 double 组,它是从 HSB(色调、亮度、饱和度)对象数组中提取的,如下所示:

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/无法应用于 java.lang.Object, int

我不确定如何进行此分组。我在这里做错了什么?

最佳答案

好吧,你激起了我的好奇心。这是实现此目的的一种方法。

    Stream<Double> ds = Arrays.stream(input).boxed();
    Map<Integer,Long> result = ds.collect(Collectors.groupingBy(v->v.intValue()/256, Collectors.counting()));

这使用了级联groupingBy,它需要第二个Collector

可能有一种方法可以使用 DoubleStream 来完成此任务,但我发现我对专用流的了解还不如我想象的那么多。以后研究一些有趣的东西。

关于java - 在 Java Streams 中按范围分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40968522/

相关文章:

java - 如何使用 Java 8 流迭代 List<int[]>?

Java异常: NoClassDefFoundError even if place the jar files into classpath correctly

java - Apache Groa 找不到主类错误

python - 组内的 Pandas 排序导致重复索引

mysql - 在 maria db(mysql) 中按顺序和分组进行选择

java - 如何通过其参数查找并收集要映射的对象?

java Stream map和mapToObj的区别

java - websphere 网络部署 v8.5.5.0 在部署期间不扫描带注释的 Web 服务类

java - 如何在swing中找到异常

mysql - 关于 ORDER BY - MySQL