2017-09-28 4 views
3

List of DataFilesを受け取るメソッドを作成し、そのフィールドの1つでString述語を使用してフィルタリングし、Stringの代わりにList of DataFilesを返すメソッドを作成します。ここでString述語を使用してストリームをフィルタリングする

は私のコードです:私は.map(DataFile::getFileName)を行うと

public static List<DataFile> someMethod(List<DataFile> dataFiles) { 
    return dataFiles 
      .stream() 
      .map(DataFile::getFileName) 
      .filter(companyAndDateFilter(date, BLABLA, LALALA)) 
      .collect(Collectors.toList()); 
} 

private static Predicate<String> companyAndDateFilter(LocalDate date, String... companyNames) { 
    String companies = getCompaniesAsString(companyNames); 
    String formattedDate = formatTheDate(date); 
    Pattern pattern = Pattern 
      .compile("^(" + companies + ")_(" + formattedDate + ")"); 
    LOGGER.info("Filtering files using RegEx: " + pattern.pattern()); 
      return pattern.asPredicate(); 
} 

私はStream<String>に私のストリームを変換するが、私はStream<DataFile>としてそれを残して、まだそのDataFile::getFileName上(Predicate<String>ある)フィルタを使用したいと思います。それは可能ですか?

答えて

5
public static List<DataFile> someMethod(List<DataFile> dataFiles) { 
    Predicate<String> hasCompanyAndDate = companyAndDateFilter(date, BLABLA, LALALA); 

    return dataFiles.stream() 
     .filter(dataFile -> hasCompanyAndDate.test(dataFile.getFileName())) 
     .collect(Collectors.toList()); 
} 
関連する問題