Java Stream Api INNER JOIN Two Lists
List<Book> bookList = Books.getAllBooks().stream()
.filter(e -> searchResultList.stream()
.anyMatch(f -> e.getTableName().equals(f.getTableName().replace("attr_", ""))))
.collect(Collectors.toList());
I came from C# and missed that feature in Java 8 API, so I wrote my own. With streamjoin you can write
Stream<Book> books =
join(Books.getAllBooks().stream())
.withKey(Book::getTableName)
.on(searchResultList.stream())
.withKey(SearchResult::getTableName)
.combine((book, searchResult) -> book)
.asStream()
Not exactly what you asked for, but here's another trick if you're using Guava:
List<Book> bookList = new ArrayList<>(Books.getAllBooks());
Lists.transform(bookList, Book::getTableName)
.retainAll(Lists.transform(searchResultList, r -> r.getTableName().replace("attr_", ""));