我正在尋找使用Java流來解決這種類型的問題:使用具有組合集合的Java流
我有一個庫對象列表。
Library類包含剖面圖。部分包含BookShelf對象的列表。 BookShelf包含一個Book對象的Map。
class Library {
Map<String, Section> sections = new HashMap<String, Section>();
String name;
public String toString() {
return name;
}
}
class Section {
List<BookShelf> bookShelves = new ArrayList<BookShelf>();
}
class BookShelf {
Map<String, Book> books = new HashMap<String, Book>();
}
class Book {
String name;
Book(String name) {
this.name = name;
}
}
我想知道的是所有具有名爲「Java 8」的書籍的圖書館對象。我認爲這是一個可以使用流來回答的查詢,然而,編碼各種流調用我得到一個Book對象集合,而不是根Library對象。
是否適合使用嵌入對象和集合的流?我將如何實現這一目標?
下面是一個簡單的代碼,使用傳統的循環中找到了答案:
List<Library> libraries = new ArrayList<Library>();
Library lib = new Library();
lib.name = "Houston Central";
libraries.add(lib);
Section section = new Section();
lib.sections.put("Reference", section);
BookShelf shelf = new BookShelf();
section.bookShelves.add(shelf);
Book book = new Book("Java 8");
shelf.books.put("Java 8", book);
book = new Book("Java 7");
shelf.books.put("Java 7", book);
/*
* Search for a Library containing a specific book
* using traditional loops.
*/
for(Library library : libraries) {
for (Section sec : library.sections.values()) {
for (BookShelf bookShelf : sec.bookShelves) {
for (Book b : bookShelf.books.values()) {
if (b.name.equals("Java 8")) {
System.out.println("Book is contained in Library " + library);
}
}
}
}
}
請告訴我們一些代碼。另外,你到目前爲止嘗試過什麼? – Sartorius
下面是一些使用傳統循環的測試代碼,但我很快就迷失了,試圖用java 8流來實現。 –