我的代码:

class BlogPost {
    String title;
    String author;
    BlogPostType type;
    int likes;

    public BlogPost(String title, String author, BlogPostType type, int likes) {
        this.title = title;
        this.author = author;
        this.type = type;
        this.likes = likes;
    }
//getter setter
}


和:

public enum BlogPostType {
    NEWS,
    REVIEW,
    GUIDE
}


和:

public static void main(String[] args) {
        List<BlogPost> posts = Arrays.asList(new BlogPost("Start Java", "Ram", BlogPostType.NEWS, 11),
            new BlogPost("Start Java 8", "Rajou", BlogPostType.REVIEW, 101),
            new BlogPost("Functional programming", "Das", BlogPostType.REVIEW, 111),
            new BlogPost("Lambda", "Ramos", BlogPostType.GUIDE, 541));

        Map<BlogPostType, List<BlogPost>> Blist = posts.stream().collect(groupingBy(BlogPost::getType));
        System.out.println(Blist);
}}


我有三个类,一个是BlogPostBlogPostTypeMain

我正在使用Map<BlogPostType, List<BlogPost>> Blist制作groupingBy()的地图,它工作得很好。我在BlogPost :: getType中使用了方法参考,也可以在(x) -> x.getType()中使用lambda表达式。

但是当我尝试更改Map的类型时,即Map<String, List<BlogPost>> Blist1,则无法使用方法引用。有没有可能使用方法引用并使类型也更改的方法?

我在想为什么不能在lambda BlogPost::getType.toString()中使用像这样的(String)BlogPost::getType(x) -> x.getType().toString()呢?
有什么可能的方法来使用方法引用并与类型转换相处?

最佳答案

您可以使用Function.identity()链接方法引用(任意数量)。例如,将以下函数放在groupingBy中:

Function.<BlogPost>identity()
        .andThen(BlogPost::getType)
        .andThen(BlogPostType::toString)


但是最好使用lambda

10-08 20:10