7
我有这个简单的bean类:映射列表,以地图的Java 8个流和groupingBy
public class Book {
public Book(Map<String, String> attribute) {
super();
this.attribute = attribute;
}
//key is isbn, val is author
private Map<String, String> attribute;
public Map<String, String> getAttribute() {
return attribute;
}
public void setAttribute(Map<String, String> attribute) {
this.attribute = attribute;
}
}
在我的主类,我添加了一些信息列表:
Map<String, String> book1Details = new HashMap<String, String>();
book1Details.put("1234", "author1");
book1Details.put("5678", "author2");
Book book1 = new Book(book1Details);
Map<String, String> book2Details = new HashMap<String, String>();
book2Details.put("1234", "author2");
Book book2 = new Book(book2Details);
List<Book> books = new ArrayList<Book>();
books.add(book1);
books.add(book2);
现在我要书列表转换为地图这种形式:
Map<String, List<String>>
使输出(上面的地图)是这样的:
//isbn: value1, value2
1234: author1, author2
5678: author1
所以,我需要将条目按isbn作为键和作者分组。一个isbn可以有多个作者。
我试图象下面这样:
Map<String, List<String>> library = books.stream().collect(Collectors.groupingBy(Book::getAttribute));
豆的格式不能更改。如果这个bean具有字符串值而不是map,我可以做到这一点,但坚持使用地图。
我已经写了传统的java 6/7做正确的方法,但试图通过Java 8的新功能来做到这一点。感谢帮助。
完美!这工作。 – daman