2017-09-28 4 views
3

DataFiles List를받은 메소드를 만들고 그 필드 중 하나에서 String 술어를 사용하여 필터링하고 String 대신 List of DataFiles를 리턴합니다. 내가 .map(DataFile::getFileName)을 수행 할 때 그 DataFile::getFileName에 (Predicate<String> 인) 내가 Stream<String>에 내 스트림을 변환하지만 필터를 Stream<DataFile>로 떠나 여전히 사용하고 싶습니다String 술어를 사용하여 스트림 필터링

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

:

여기 내 코드입니다. 그게 가능하니?

답변

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()); 
} 
관련 문제