2017-10-03 6 views
3

Personne est ma racine POJA et j'ai la liste des numéros de téléphone de mon objet enfant.Comment faire pour récupérer l'objet parent en filtrant de l'objet enfant dans le flux java

String firstName; 

String lastName; 

Long id; 

List<String> phoneNumber = new ArrayList<>(); 

int age; 


public Person(String firstName, String lastName, int age, Long id, List<String> phone) { 
    super(); 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.age = age; 
    this.id = id; 
    this.phoneNumber = phone; 
} 

List<Person> personList = Arrays.asList(
    new Person("Abdul", "Razak", 27, 50L, Arrays.asList("100", "101", "102")), 
    new Person("Udemy", "tut", 56, 60L, Arrays.asList("200", "201", "202")), 
    new Person("Coursera", "tut", 78, 20L, Arrays.asList("300", "301", "302")), 
    new Person("linked", "tut", 14, 10L, Arrays.asList("400", "401", "402")), 
    new Person("facebook", "tut", 24, 5L, Arrays.asList("500", "501", "502")), 
    new Person("covila", "tut", 34, 22L, Arrays.asList("600", "602", "604")), 
    new Person("twitter", "tut", 64, 32L, Arrays.asList("700", "702", "704")) 
); 

List<String> list = personList.stream() 
    .map(p -> p.getPhoneNumber().stream()) 
    .flatMap(inputStream -> inputStream) 
    .filter(p -> p.contains("502")) 
    .collect(Collectors.toList()); 

Je souhaite récupérer une personne dont le nombre est égal à une chaîne spécifique. Est-il possible d'y parvenir en utilisant un flux?

List<String> list = personList.stream() 
    .map(p -> p.getPhoneNumber().stream()) 
    .flatMap(inputStream -> inputStream) 
    .filter(p -> p.contains("502")) 
    .collect(Collectors.toList()); 

En simple, comment récupérer l'objet parent en filtrant l'objet enfant?

Répondre

4
personList.stream().filter((person)->person.getContacts().contains("100")) 
       .collect(Collectors.toList()); 

Vous obtiendrez l'apparié Person.

+0

Merci. Évalué trop fortement en utilisant flatmap pour obtenir l'objet enfant –

2

Je voudrais récupérer la personne dont le nombre est égal à spécifique chaîne

List<Person> list = personList.stream().filter(p -> p.getPhoneNumber().contains("502")) 
        .collect(Collectors.toList()) 

Cela doit vous fournir la liste des Person dont la liste des phoneNumber s se compose de « 502 » en tant que chaîne.

1

Essayez ceci List<Person> collect = personList.stream().filter(person -> person.phoneNumber.contains("502")).collect(Collectors.toList());

+0

pour obtenir la liste de phonenumber personne ... vous pouvez également l'obtenir par la méthode getter ou en appelant. opérateur. Avez-vous essayé ce code? Cela fonctionne bien .. s'il vous plaît vérifier avant de commenter – Hiren