2016-10-27 10 views
-1

私は著者のコレクションLinkedList<Author> autorenと書籍のコレクションList<Book> buecherを持っています。書籍とその著者との関係は、著者の電子メールアドレスです。リストに含まれるサブリストのストリームとフィルタのデータ

このブッククラスには、の書籍のメールアドレスprivate Set<String> autorenSetあります。

各書籍について、対応する作者を取得し、作者の姓と名を印刷したいと考えています。

LinkedList<Author> autoren = (LinkedList<Autor>) dataController.getAutoren().stream() 
     .filter(s -> buch.getAutoren().contains(s.getEmailadresse())); 

for (Author author: autoren) { 
    sysout(auther.getName()) 
} 

ブールのための私のデータモデルは

public class Buch { 

private String title; 

private String isbnNummer; 

private Set<String> autoren;} 

どのように私はすべての書籍のすべての著者のリストを取得し、ラムダ式を使用して、ブック名でフィルタリングすることができますか?のように見えますか

答えて

1

ここで、あなたが望む役に立つかもしれません例完全には明らかではありません。

package ch.revault.java8; 

import static java.lang.String.format; 
import static java.util.Arrays.asList; 
import static java.util.stream.Collectors.toMap; 

import java.util.LinkedHashSet; 
import java.util.List; 
import java.util.Map; 
import java.util.Set; 

import org.junit.Test; 

public class AppTest { 

    @Test 
    public void testApp() { 
     List<Book> books = getBooks(); 
     List<Author> authors = getAuthors(); 

     String yourBookNameFilter = "The martian"; 

     Map<String, Author> authorsByEmail = authors 
       .stream() 
       .collect(toMap(a -> a.email, a -> a)); 

     books.stream() 
       .filter(b -> b.title.contains(yourBookNameFilter)) // <-- simple 
                    // filter, 
       .flatMap(b -> b.authorEmails.stream()) 
       .distinct() 
       .map(e -> authorsByEmail.get(e)) // you could inline 
               // authorsByEmail lookup 
       .forEach(a -> System.out.println(format("%s, %s", a.firstName, a.lastName))); 
    } 

    public class Author { 
     final String firstName; 
     final String lastName; 
     final String email; 

     public Author(String firstName, String lastName, String email) { 
      this.firstName = firstName; 
      this.lastName = lastName; 
      this.email = email; 
     } 
    } 

    public class Book { 
     final String title; 
     final String isbnNummer; 
     final Set<String> authorEmails; 

     public Book(String title, String isbnNummer, Set<String> authorEmails) { 
      this.title = title; 
      this.isbnNummer = isbnNummer; 
      this.authorEmails = authorEmails; 
     } 
    } 

    private List<Author> getAuthors() { 
     return asList(
       new Author("f1", "l1", "[email protected]"), 
       new Author("f2", "l2", "[email protected]"), 
       new Author("f3", "l3", "[email protected]"), 
       new Author("f4", "l4", "[email protected]")); 
    } 

    private List<Book> getBooks() { 
     return asList(
       new Book("The martian", "i1", new LinkedHashSet<>(asList("[email protected]", "[email protected]"))), 
       new Book("t2", "i2", 
         new LinkedHashSet<>(asList("[email protected]", "[email protected]", "[email protected]")))); 
    } 
} 
関連する問題