2017-10-03 17 views
3

人は私のルートPOJAであり、私は自分の子オブジェクトとして電話番号のリストを持っています。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()); 

数字が特定の文字列に等しい人物を取得したいと考えています。 stream?を使ってこれを達成することは可能でしょうか?

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

ありがとうございます。フラットマップを使用して子オブジェクト –

2

私は、その番号の特定 文字列

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

これはあなたのリストphoneNumber Sの文字列として「502」で構成されていPersonのリストを取得するものに等しい者を取得したいと思います。

1

お試しください。List<Person> collect = personList.stream().filter(person -> person.phoneNumber.contains("502")).collect(Collectors.toList());

+0

を取得して、人の電話番号リストを取得することによって高すぎると評価されました。ゲッターメソッドまたは電話で取得することもできます。オペレーター。このコードを試しましたか?それは正常に動作しています..コメントする前に確認してください – Hiren

関連する問題