利用方法从集合创建地图

时间:2018-06-22 23:35:05

标签: java methods lambda static static-methods

我尝试创建静态方法,该方法将实例字段的映射创建为键,并将实例本身创建为值。我尝试过这样的事情:

public static <T> Map<Object, T> collectionToMap(Collection<T> collection, Function<Object, T> fieldExtractor) {
        return collection.stream()
                .collect(Collectors.toMap(fieldExtractor, e -> e));
    }

但是当我尝试传递一个函数作为参数时。我遇到了编译错误,因为getEmail()方法不是静态的,但是toMap()是静态的。

ProjectUtils.collectionToMap(collection, User::getEmail);

如何编写具有相似签名的静态方法并传递非静态方法引用?也许存在另一种方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

首先像这样更改您的ProjectUtils类。

public class ProjectUtils <T, S> {

    public static <T, S> Map<S, T> collectionToMap(Collection<T> collection, Function<T, S> fieldExtractor) {
        return collection.stream().collect(Collectors.toMap(fieldExtractor, Function.identity()));
    }
}

然后客户端代码应该是这样的。

ProjectUtils.<User, String>collectionToMap(Collections.emptyList(), User::getEmail);