Java 用于从集合创建映射的Util方法

Java 用于从集合创建映射的Util方法,java,generics,methods,lambda,static-methods,Java,Generics,Methods,Lambda,Static Methods,我尝试创建静态方法,该方法创建实例字段的映射作为键,实例本身作为值。我试过这样的方法: public static <T> Map<Object, T> collectionToMap(Collection<T> collection, Function<Object, T> fieldExtractor) { return collection.stream() .collect(Collector

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

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

如何编写具有类似签名的静态方法并传递非静态方法引用?或者可能存在另一种方法来实现这一点

像这样编写一个通用方法
collectionToMap

public static <T, S> Map<S, T> collectionToMap(Collection<? extends T> collection,
    Function<? super T, ? extends S> fieldExtractor) {
    return collection.stream()
        .collect(Collectors.toMap(fieldExtractor, v -> v, (a, b) -> a));
}

假设
collection
collection
,我认为您只需要使用
Function
而不是
Function
来提取密钥。我不明白这和静态和非静态有什么关系。你得到的编译错误的实际文本是什么?哦,它确实有效!谢谢错误为:无效的方法引用无法从静态上下文引用非静态方法getEmail()。这个错误真的让人困惑。就我个人而言,我会选择不使用
Object
作为键类型
publicstaticmap collectionToMap(Collection Collection,functionfieldextractor)
@Radiodef,如果试图编译,我实际上遇到了错误。第二点是你描述的真正原因。但是IDE说的是非静态的。d.j.brown,完全同意,谢谢
public static <T, S> Map<S, T> collectionToMap(Collection<? extends T> collection,
    Function<? super T, ? extends S> fieldExtractor) {
    return collection.stream()
        .collect(Collectors.toMap(fieldExtractor, v -> v, (a, b) -> a));
}
ProjectUtils.collectionToMap(Collections.emptyList(), User::getEmail);