2017-02-08 22 views
2
Persons = personDao.getFileInformation(filePath) 
        .skip(1) 
        .map(this::getPerson) 
        .filter(person -> person != null) 
        .collect(Collectors.toList()); 

getFileInformation(filePath) returns Stream<String> 

ファイル内の行を読み取った後。マップメソッドの条件付きメソッド呼び出しjava 8

私は、これは使用済みのラムダ式を達成することができますどのように列挙

public enum gender { 
male,female 
} 

の値に基づいてgetMaleまたはgetFemale方法でgetPerson方法を交換したいですか?

+0

getMaleとgetFemaleはそれぞれ何を返すのでしょうか?人?または男性/女性のオブジェクトですか? – Eugene

+1

@Eugene:私はこの質問をあなたの(削除された)回答のように解釈しますが、質問者がとにかく気にしなければ努力する価値はないと思われます... – Holger

+0

@Holger私は実際に注意を喚起したいなぜなら、私は本当に、 'return p.getGender()== Gender.MALE? this :: getMale:this :: getFemale; 'はコンパイルされません。私は深く掘り下げていないが、一度注意が払われれば、私は望んでいた。 – Eugene

答えて

3

あなただけの(Person.getGenderのようなアクセサがあると仮定)性別によってフィルタリングする場合は、その後、あなただけfilterを追加する必要があります。

List<Person> malePeople; 
malePeople = personDao.getFileInformation(filePath) 
         .skip(1) 
         .map(this::getPerson) 
         .filter(Objects::nonNull) 
         .filter(p -> p.getGender() == gender.male) // or gender.female 
         .collect(Collectors.toList()); 

するのではなくグループあなたの結果、下記の意志にしたい場合あなたを助ける:

List<Person> femalePeople = peopleByGender.get(gender.female); 

Map<gender, List<Person>> peopleByGender; 
peopleByGender = personDao.getFileInformation(filePath) 
          .skip(1) 
          .map(this::getPerson) 
          .filter(Objects::nonNull) 
          .collect(Collectors.groupingBy(Person::getGender)); 

今ですべての女性の人々にアクセス

と男性のものと:

.filter(this::getMale) // or: YourClass::getMale for a static method 

:あなただけの、あなたは、次のいずれかを使用することができ、フィルタ述語(p -> p.getGender() == gender.male)を簡素化するための方法を使用したい場合は

List<Person> malePeople = peopleByGender.get(gender.male); 

this::getMaleは、以下の方法を指す:

boolean getMale(Person p) { 
    return p.getGender() == gender.male; 
} 

又は

は、以下の方法を指し
.filter(getMale()) 

Predicate<Person> getMale() { 
    return p -> p.getGender() == gender.male; 
} 
+1

skip()を使用する際のコストを考えてみてください。 https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#skip-long- –

関連する問題