当前位置: 首页 > 面试题库 >

Java 8 Lambda,用于为每个部门选择最高薪水员工

苏麒
2023-03-14
问题内容
class Employee {
    public string department;
    public int salary;
}

List<Employee> allEmployees = ...

我需要有一个清单,每个部门只有一名最高薪水雇员。allEmployees是源列表。


问题答案:

您可以使用分组收集器来做到这一点:

Map<String, Employee> topEmployees =
    allEmployees.stream()
                .collect(groupingBy(
                    e -> e.department,
                    collectingAndThen(maxBy(comparingInt(e -> e.salary)), Optional::get) 
                ));

与静态导入

import static java.util.Comparator.comparingInt;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.maxBy;

此代码创建了Stream所有员工的,并在的帮助下将其与部门分组Collectors.groupingBy。对于分类为同一键的所有值,我们只需要保留薪水最高的员工,因此我们将其与Collectors.maxBy进行比较,比较器会将薪金与进行比较Comparator.comparingInt。由于maxBy返回一个Optional<Employee>(以处理列表为空的情况),我们通过调用来包装它,Collectors.collectingAndThen并返回一个仅返回雇员的装订器:在这种情况下,我们知道可选内容不会为空。



 类似资料:
  • 问题内容: 假设有工资表: 我目前正在使用此代码(AutoIT脚本: 因此,如果Hour_number在低小时或高小时之间,那两个查询是完美的。我需要某种查询,它基本上会执行以下操作: 然后将其重复为“默认”,因为找不到该员工。 补充:如果仅通过1个查询未找到$ Employee,是否可以尝试使用“ Default”? 问题答案: 如果仅通过1个查询未找到$ Employee,是否可以尝试使用“

  • 员工属于一个部门(外键=D_ID)。员工有一个SSN(主键)、姓名、工资和D_ID。

  • 问题内容: 我正在写一个查询,以查找收入高于其部门平均工资的员工。我需要显示员工ID,薪水,部门ID和该部门的平均工资。 我有一个几乎可以正常使用的查询,但它一直显示“ ORA-00904:“ AVG_SAL”:无效标识符”错误。我正确地做到了吗?为什么会出现此无效的标识符错误? 问题答案: 我不相信您可以在WHERE子句中引用列别名(在这种情况下为avg_sal)。 您需要重复该内部查询,即:

  • 问题内容: 假设您得到以下名为Employee的简单数据库表,该表具有2个列,分别名为Employee ID和Salary: 我想写一个查询,从员工那里选择max(salary)作为max_salary,2nd_max_salary 然后它应该返回 我知道如何找到第二高的薪水 或找到第n个 但我无法弄清楚如何将这2个结果结合起来以获得所需的结果 问题答案: 您可以只运行2个查询作为内部查询以返回2

  • 问题内容: 我指的是以下查询,以找到雇员的Nth最高薪水。 一位先生说,此查询有效。有人可以解释一下如何将COUNT(n等于1到X,其中X是不同工资总额)的值等于&n会产生这个结果吗? 我试图了解数据库如何在内部处理此查询并产生结果? 谢谢你。 问题答案: 首先,查询将返回 最低 薪水值。要返回最高薪水值,您必须更改为。 接下来,此查询的工作方式是:首先找到一个唯一的薪水值列表作为一个派生表,然后

  • 问题内容: 如何使用“ rownum”关键字从任何表中检索第三行(我使用的是oracle-10g) 问题答案: 当查询产生行时,Oracle将按顺序为ROWNUM赋值-因此,获取的第一行获取ROWNUM = 1,获取的第二行获取ROWNUM = 2,获取的第三行获取ROWNUM = 3,依此类推。注意-对于一行要被分配ROWNUM = 3,必须获取前两行。这就是为什么您的查询不返回任何行的原因。您