我的代码:
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);
}}
我有三个类,一个是
BlogPost
,BlogPostType
和Main
。我正在使用
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