首页 > 解决方案 > 是否可以通过点表示法将一系列值流式传输/映射到一个结果中?

问题描述

我正在尝试做这样的事情。

public static int generateKey(Collection<Column> currentColumns, Object entry) {
    int hash = 0;
    for (Column c : currentColumns) { 
        hash = Objects.hash(hash, c.getHashValue(entry));
    }
    return hash;
}

但我知道它Objects.hash()可以采用许多参数,因为它是点表示法,所以我想知道我是否可以从currentColumns集合中流式传输,每个结果从getHashValue()in 到Objects.hash方法?

我的尝试不值得分享,因为我找不到任何关于这是否可能的指导。

编辑 - 对于一些现实世界的上下文,我正在对条目对象的集合执行类似 SQL 查询以生成 gorupBy / 聚合摘要,并且分组的对象的任何部分都需要关闭,所以我我正在使用这个东西为 groupingBy 收集器生成一个密钥。如果我的结果超过一定长度,那么列会被删除以尝试减少行数,然后会使用减少的列集重试。

标签: javajava-stream

解决方案


由于 vararg 基本上是数组的语法糖,因此您可以执行以下操作:

Object[] array = myObjects.stream().map(MyObject::getAValue).toArray();
int hash = Objects.hash(array);


推荐阅读