すべてのリー:
私のコード:
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つがある三つのクラスを持っているBlogPost
、BlogPostType
とMain
。
私はのマップを作っています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)
それは、ラムダを使用することをお勧めします