Mi código:
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
}
y:
public enum BlogPostType {
NEWS,
REVIEW,
GUIDE
}
y:
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);
}}
Tengo tres clases uno es BlogPost
, BlogPostType
y Main
.
Estoy haciendo un mapa de Map<BlogPostType, List<BlogPost>> Blist
mediante el uso groupingBy()
y funciona perfectamente bien. i utilizado un método de referencia hay BlogPost :: getType , puedo usar lambda expresión también (x) -> x.getType()
.
Pero cuando trato de cambiar el tipo de mapa, es decir, Map<String, List<BlogPost>> Blist1
entonces no puedo usar Método de referencia . ¿Hay alguna forma posible utilizar el método de referencia y obtener el tipo también cambió ??
Estoy pensando por qué no puedo utilizamos como esto: BlogPost::getType.toString()
o (String)BlogPost::getType
bien podemos hacer esto en lambda (x) -> x.getType().toString()
. De cualquier forma posible el uso de referencia Método y se llevan bien con la conversión de tipo también?
se puede utilizar Function.identity()
para la cadena de referencias de métodos (como todas las que quieras). Por ejemplo, ponga la siguiente función en groupingBy
:
Function.<BlogPost>identity()
.andThen(BlogPost::getType)
.andThen(BlogPostType::toString)
pero es mejor usar lambda