Changer Type de méthode de référence

Chaque Lee:

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, BlogPostTypeet Main.

Je fais une carte Map<BlogPostType, List<BlogPost>> Blisten 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>> Blist1donc 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::getTypebien 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?

Adrian:

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

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=222924&siteId=1
conseillé
Classement