在java中将匿名内部类设为lambda

72qzrwbm  于 2021-06-30  发布在  Java
关注(0)|答案(3)|浏览(298)

我需要修改我的代码,目标是(我引用)“使匿名内部类成为lambda”。
我有一个解决这个问题的建议,但是不知道lambdas在java中是如何工作的我不知道如何将这个建议应用到我的具体案例中,有人能帮我吗?
这是我的建议
这是“错误”的版本:

myCollection.stream().map(new Mapper<String,String>() {
      public String map(String input) {
          return new StringBuilder(input).reverse().toString();
      }
});

这是“正确的”版本:

myCollection.stream().map(input -> new StringBuilder(input).reverse().toString());

现在,我的代码中的“错误”版本是:

Collections.sort(commits, new Comparator<GitCommit>() {
    // @Override
    public int compare(GitCommit c1, GitCommit c2) {
        return c1.getDate().compareTo(c2.getDate());
        }
    });

对应的“正确”版本是什么?

m3eecexj

m3eecexj1#

更改此项:

Collections.sort(commits, new Comparator<GitCommit>() {
    // @Override
    public int compare(GitCommit c1, GitCommit c2) {
        return c1.getDate().compareTo(c2.getDate());
        }
    });

Collections.sort(commits, (c1, c2) -> c1.getDate().compareTo(c2.getDate()));

你不需要使用 Collections.sort 您可以简单地调用默认列表 method 排序,即:

commits.sort((c1, c2) -> c1.getDate().compareTo(c2.getDate()));

并利用参考方法和 interface 比较器:

commits.sort(Comparator.comparing(GitCommit::getDate));

关于列表默认排序方法:
默认void排序(comparator<?super e>c)根据指定比较器产生的顺序对该列表进行排序。

oxalkeyp

oxalkeyp2#

Collections.sort(commits, Comparator.comparing(GitCommit::getDate));

甚至

commits.sort(Comparator.comparing(GitCommit::getDate));
brgchamk

brgchamk3#

在第一种情况下,方法 map 要求 Function . 我想这是错的,因为 Mapper. 只要 Mapper 不延伸 Function . 这是一条路:

interface Mapper<T, R> extends Function<T, R> {
    default R map(T t) {
        return apply(t);
    }
}
myCollection.stream().map(new Mapper<String,String>() {
    public String apply(String input) {
        return new StringBuilder(input).reverse().toString();
    }
});

第二种情况是正确的,我假设您的目标是将匿名函数打包为:
lambda表达式:

Collections.sort(commits, (c1, c2) -> c1.getDate().compareTo(c2.getDate()));

或方法引用:

Collections.sort(commits, Comparator.comparing(GitCommit::getDate));

相关问题