2017-10-03 2 views
3

사람이 내 루트 POJA이고 내 자식 개체로 전화 번호 목록이 있습니다.자바 스트림에서 하위 객체를 필터링하여 상위 객체를 검색하는 방법

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()); 

숫자가 특정 문자열과 일치하는 사람을 검색하고 싶습니다. 스트림을 사용하여 이것을 달성 할 수 있습니까?

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

간단히 말해, 자식 개체를 필터링하여 부모 개체를 검색하는 방법은 무엇입니까?

답변

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

일치하는 번호를 부여합니다 Person.

+0

당신을 감사하십시오. flatmap을 사용하여 자식 객체 –

2

나는이 당신에게 그 목록 phoneNumber s의 문자열로 "502"로 구성 Person의 목록을 얻을 것이다, 그 번호에 해당 특정 문자열

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

에 사람을 검색하고 싶습니다.

1

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

+0

을 가져 와서 phonenumber 목록을 얻는 것으로 너무 높게 평가되었습니다 ... getter 메소드 또는 호출하여 얻을 수도 있습니다. 운영자. 이 코드를 사용해 보셨습니까? 잘 작동하고 있습니다 ... 의견을 말하기 전에 확인하십시오. – Hiren