map map的通用方法

时间:2016-05-01 11:29:17

标签: java generics

我们说我有员工班:

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获得薪水?

1 个答案:

答案 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