按键通过流排序的集合

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"}

Hol*_*ger 7

不要排序,只需查看已选择的书籍:

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)