メソッドリファレンスの変更タイプ

すべてのリー:

私のコード:

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);
}}

私は1つがある三つのクラスを持っているBlogPostBlogPostTypeMain

私はのマップを作っていますMap<BlogPostType, List<BlogPost>> Blist使用してgroupingBy()、それが完全に正常に動作します。私はそこにメソッド参照を使用ブログ投稿::のgetTypeが、私はまた、ラムダ式を使用することができます(x) -> x.getType()

私は地図の種類を変更しようとすると、しかし、つまりMap<String, List<BlogPost>> Blist1、私は使用することはできませんメソッドの参照をメソッド参照を使用し、タイプも変わっ取得するすべての可能な方法はあります?

:カントは、我々はこのように使用する理由私は考えていますBlogPost::getType.toString()(String)BlogPost::getType私たちはラムダでこれを行うことができますが(x) -> x.getType().toString()メソッドの参照を使用しても、タイプの変換と仲良くするために、任意の可能な方法?

エイドリアン:

あなたが使用することができますFunction.identity()(あなたが好きな多くのように)連鎖方式参照に。たとえば、次の関数を入れgroupingBy

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

それは、ラムダを使用することをお勧めします

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222923&siteId=1