java - java更改类型引用的类型

我的代码:


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 Map<BlogPostType, List<BlogPost>> Blist 通过使用 groupingBy(),它可以完美地工作。 我使用了一个方法引用了 BlogPost::getType,我还可以使用lambda表达式。

但是当我试图改变地图的类型时,例如 Map<String, List<BlogPost>> Blist1 然后我不能使用方法参考。 是否有可能使用方法引用并得到该类型的更改?

我想为什么我们不能用这样的方法: BlogPost::getType.toString() 或者 (String)BlogPost::getType,我们可以在 lambda (x) -> x.getType().toString() 中进行。 使用方法引用并同时转换类型的任何可能方法?

时间:

代替lambda表达式的方法引用使代码更易于阅读,因此建议在可能的情况下,用方法引用替换lambda表达式,以英镑为单位。

如果你在你的案例中使用了方法调用,那么在你的例子中 BlogPost::getType 将工作正常,而 BlogPost::getType.toString() 不会因为它。

方法引用替代单个方法调用,因此不能简单地替换包含 的lambda表达式,多个方法调用 。

如下所示,可以使用两种方法引用,但是我坚持使用lambda表达式,这非常简单。


Map<String, List<BlogPost>> Blist = 


 posts.stream()


. collect(Collectors.groupingBy(((Function<BlogPost,BlogPostType>)BlogPost::getType).andThen(BlogPostType::toString)));



或者


Function<BlogPost,BlogPostType> getType = BlogPost::getType;


Map<String, List<BlogPost>> Blist = 


 posts.stream()


. collect(Collectors.groupingBy(getType.andThen(BlogPostType::toString)));



...