作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
如何使用流将列表转换为列表的映射?
我要转换List<Obj>
至 Map<Obj.aProp, List<Obj.otherProp>>
,
不仅List<Obj>
至 Map<Obj.aProp, List<Obj>>
class Author {
String firstName;
String lastName;
// ...
}
class Book {
Author author;
String title;
// ...
}
这是我要转换的列表:
List<Book> bookList = Arrays.asList(
new Book(new Author("first 1", "last 1"), "book 1 - 1"),
new Book(new Author("first 1", "last 1"), "book 1 - 2"),
new Book(new Author("first 2", "last 2"), "book 2 - 1"),
new Book(new Author("first 2", "last 2"), "book 2 - 2")
);
我知道怎么做:
// Map<Author.firstname, List<Book>> map = ...
Map<String, List<Book>> map = bookList.stream()
.collect(Collectors.groupingBy(book -> book.getAuthor().getFirstName()));
但是我能做些什么来获得它:
// Map<Author.firstname, List<Book.title>> map2 = ...
Map<String, List<String>> map2 = new HashMap<String, List<String>>() {
{
put("first 1", new ArrayList<String>() {{
add("book 1 - 1");
add("book 1 - 2");
}});
put("first 2", new ArrayList<String>() {{
add("book 2 - 1");
add("book 2 - 2");
}});
}
};
// Map<Author.firstname, List<Book.title>> map2 = ...
Map<String, Map<String, List<String>> map2 = bookList.stream(). ...
^^^
最佳答案
使用 Collectors.mapping
将每本 Book
映射到相应的标题:
Map<String, List<String>> map = bookList.stream()
.collect(Collectors.groupingBy(book -> book.getAuthor().getFirstName(),
Collectors.mapping(Book::getTitle,Collectors.toList())));
关于java - 如何将 List<Obj1> 转换为 Map<Obj1.prop, List<Obj1.otherProp>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51079072/
我是一名优秀的程序员,十分优秀!