joe*_*ens 2 java java-8 java-stream
我有一个简单的类,有三个值:
class Book{
private String title;
private String author;
private double price;
}
Run Code Online (Sandbox Code Playgroud)
title是独一无二的(永远).有一个选定的标题列表(as List<String>)和每个Book系统的列表.我希望Book从标题列表中获取所有密钥.我的代码是:
List<Book> allBooks = getAllBooks();
List<String> selectedTitles = getSelectedTitles();
List<Book> selectedBooks = allBooks.stream().
filter(x -> selectedTitles.contains(x.getTitle())).
collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但是选择的allBook书籍是通过insted 来订购的selectedTitles.例如:
allBooks(only title) = {"A","B","C","D"}
selectedTitles = {"B","A","D"}
selectedBooks(only title) = {"A","B","D"}
Run Code Online (Sandbox Code Playgroud)
怎么可能(通过stream()订购selectedTitles?)(这个例子应该是{"B","D","A"}?
不要排序,只需查看已选择的书籍:
List<Book> allBooks = getAllBooks();
List<String> selectedTitles = getSelectedTitles();
Map<String,Book> titleToBook = allBooks.stream()
.collect(Collectors.toMap(Book::getTitle, Function.identity()));
List<Book> selectedBooks = selectedTitles.stream()
.map(titleToBook::get).filter(Objects::nonNull)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |