Mon code:
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
}
et:
public enum BlogPostType {
NEWS,
REVIEW,
GUIDE
}
et:
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);
}}
J'ai trois classes on est BlogPost
, BlogPostType
et Main
.
Je fais une carte Map<BlogPostType, List<BlogPost>> Blist
en utilisant groupingBy()
et il fonctionne parfaitement bien. je l' ai utilisé une référence de la méthode il BlogPost :: getType , je peux aussi utiliser lambda expression (x) -> x.getType()
.
Mais lorsque je tente de changer le type de carte, à savoir Map<String, List<BlogPost>> Blist1
donc je ne peux pas utiliser la méthode de référence . Est - il possible possible d'utiliser la méthode de référence et obtenir le type a également changé ??
Je pense cant pourquoi nous utilisons comme ceci: BlogPost::getType.toString()
ou (String)BlogPost::getType
bien que nous pouvons le faire dans lambda (x) -> x.getType().toString()
. Toutes les façons d'utiliser la méthode de référence et obtenir ainsi la conversion de type aussi?
vous pouvez utiliser Function.identity()
des références de la méthode de la chaîne (autant que vous voulez). Par exemple, mettre la fonction suivante dans groupingBy
:
Function.<BlogPost>identity()
.andThen(BlogPost::getType)
.andThen(BlogPostType::toString)
mais il est préférable d'utiliser lambda