当前位置: 首页 > 知识库问答 >
问题:

在Java8中用group by实现计数

邓英卓
2023-03-14

我正在寻找一个在lambda表达式中基于计数的group by、having和then filter的实现。

select COUNT(employee_id), department_id  from employee
GROUP BY department_id
HAVING COUNT(employee_id) > 1

使用lambda表达式实现这一点是否有任何简单的实现。

共有1个答案

崔棋
2023-03-14

您可以将groupingby收集器与counting()collectingandthen组合使用:

import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;

...

Map<Long, Long> map = 
    employees.stream()
             .collect(collectingAndThen(groupingBy(Employee::getDeptId, counting()), 
                                        m -> { m.values().removeIf(v -> v <= 1L); return m; }));

注意,这里不能保证groupingby返回的映射的可变性,因此如果需要,您可以使用重载版本并提供一个具体的可变实例。

 类似资料:
  • 本文向大家介绍JAVA8 STREAM COLLECT GROUPBY分组实例解析,包括了JAVA8 STREAM COLLECT GROUPBY分组实例解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了JAVA8 STREAM COLLECT GROUPBY分组实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实体类Peop

  • 问题内容: 是否有更好的方法来计数Java8中的int出现次数 问题答案: 尝试:

  • 问题内容: 我想计算一个分组的pandas dataframe列中字符串的出现。 假设我有以下数据框: 首先,我想GROUP BY和。对于这些组中的每一个,我都希望计算该列中的出现次数。 结果应如下所示: 通过两列进行分组很容易: 但是接下来呢? 问题答案: 调用对象的“得分”列,并使用vectorise方法,使用此方法过滤和调用: 要将其分配为列使用,以便聚合返回其索引与原始df对齐的序列:

  • 我在Java8中有一段代码,以便使用Spark SQL API计算Annova统计信息,如下面的代码片段1所示。此代码段是基于原始SCALA代码进行的裁剪,可在https://gist.github.com/srnghn/c74835818802fefabd76f1bcd6746831/77690607caab9039b015d2232c1216500427a995 问题 问题的实质已在以下案文中

  • 问题内容: df = pd.DataFrame({‘A’ : [‘foo’, ‘bar’, ‘foo’, ‘bar’, ‘foo’, ‘bar’, ‘foo’, ‘foo’], ‘B’ : [‘one’, ‘one’, ‘two’, ‘three’, ‘two’, ‘two’, ‘one’, ‘three’], ‘C’ : [np.nan, ‘bla2’, np.nan, ‘bla3’, np.n

  • 问题内容: 我试图在pySpark的一行代码中进行多项操作,但不确定我的情况是否可行。 我的意图是不必将输出另存为新的数据框。 我当前的代码非常简单: 我的意图是在使用后添加,以得到与每个 列值匹配的记录计数,这些记录打印\显示为输出。 尝试使用时,出现异常。 有什么方法可以同时实现和 .show()打印,而无需将代码拆分为两行命令,例如: 或更好的办法是将合并的输出输出到-额外的一栏,用于说明与