我们说我有员工班:
class Employee {
private String name;
private int salary;
// ...
}
我声明并初始化了Employee employee
的列表。在它之后,我创建了地图,你可以看到如下:
Map<String, List<Employee>> m = employee.stream().collect(Collectors.groupingBy(Employee::getName));
问题是,如何制作将在屏幕上打印此地图的通用方法?我被困在这里,因为我不知道该怎么处理这个List。
正在考虑这样的事情:
public static <K, V> void showVal(Map<K, List<V>> m) {
m.forEach((k, v) -> System.out.println("Key (name): " + k + " Salary: " + v) );
}
以上代码仅提供了对员工的引用,如何使用此泛型方法中的List获得薪水?
答案 0 :(得分:1)
您可以使用有界泛型。这样,您可以确保地图的值始终是Employee
的实例集合:
private static <K, V extends Collection<? extends Employee>> void print(Map<K, V> map) {
map.forEach((name, employees) -> {
int sum = employees.stream()
.mapToInt(Employee::getSalary)
.sum();
System.out.println("Employee: " + name + " with salary " + sum);
});
}
另请参阅Oracle官方文档:Generic Methods and Bounded Type Parameters