我对java函数签名有疑问

我对java函数签名有疑问,java,lambda,Java,Lambda,我发现函数接口和getMethod似乎是可替换的,是什么让它工作的 public class App { public static void main(String[] args) { Map<String, String> collect = Stream.of(new App(), new App(), new App()) .collect(Collectors.toMap(App::getString, (app)

我发现函数接口和getMethod似乎是可替换的,是什么让它工作的

public class App {

    public static void main(String[] args) {

        Map<String, String> collect = Stream.of(new App(), new App(), new App())
                .collect(Collectors.toMap(App::getString, (app) -> "aaa"));

    }

    public String getString() {
        return "str";
    }
}
公共类应用程序{
公共静态void main(字符串[]args){
Map collect=Stream.of(新应用(),新应用(),新应用())
.collect(Collectors.toMap(App::getString,(App)->“aaa”);
}
公共字符串getString(){
返回“str”;
}
}
但当我使用lambda替换getMethod时,它失败了。为什么这不起作用

        Map<String, String> collect = Stream.of(new App(), new App(), new App())
                .collect(Collectors.toMap(() -> "str", (app) -> "aaa"));
Map collect=Stream.of(新应用(),新应用(),新应用())
.collect(Collectors.toMap(()->“str”,(app)->“aaa”);

采集器。toMap
需要一个
功能。您能更具体地说明您遇到的故障类型吗?编译错误?运行时异常?哪一个?将代码复制到Java开发环境中只是为了重建可用的有用信息,这有点烦人……这是编译错误。哪个编译错误?你为什么要妨碍那些想帮助你的人?
.collect(Collectors.toMap((app) -> "str", (app) -> "aaa"));
//                         ^^^