Java Stream Api内部加入两个列表

Art*_*tur 4 java java-8

如何使用Java Stream Api替换此代码?

for (Book book : Books.getAllBooks()) {
        for (SearchResult searchResult : searchResultList) {
          if (searchResult.getTableName().replace("attr_", "") .equals(book.getTableName())) {
            bookList.add(book);
          }
        }
      }
Run Code Online (Sandbox Code Playgroud)

Som*_*era 6

List<Book> bookList = Books.getAllBooks().stream()
            .filter(e -> searchResultList.stream()
                         .anyMatch(f -> e.getTableName().equals(f.getTableName().replace("attr_", ""))))
            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)


sim*_*mat 5

我来自C#,错过了Java 8 API中的该功能,所以我编写了自己的功能。使用streamjoin可以编写

Stream<Book> books = 
 join(Books.getAllBooks().stream())
 .withKey(Book::getTableName)
 .on(searchResultList.stream())
 .withKey(SearchResult::getTableName)
 .combine((book, searchResult) -> book)
 .asStream()
Run Code Online (Sandbox Code Playgroud)