반응형

JDK 8 API 에서 파일에 대해 함수형 스트림을 사용할 수 있는 메서드가 추가되었다. 
- find를 이용해서 어떤 디렉토리에 존재하는 모든 파일을 가져오도록 하는 함수


Path start = Paths.get("");
int maxDepth = 5; // Integer.MAX_VALUE로 하면 모든 파일을 가져올 수 있다
try (Stream<Path> stream = Files.find(start, maxDepth, (path, attr) ->
        String.valueOf(path).endsWith(".js"))) {
    String joined = stream
        .sorted()
        .map(String::valueOf)
        .collect(Collectors.joining("; "));
    System.out.println("Found: " + joined);
}


 위 예제에선 현재 작업 디렉터리 내의 모든 파일을 훑는다. 그리고 각각의 경로를 각자의 문자 표현식(valueOf 메서드)으로 맵핑한다. 그 결과는 필터되고, 정렬되고 마지막으로 합쳐진(joined) 하나의 문자열이다. 만약 함수형 스트림에 익숙하지 않다면 Java 8 Stream Tutorial 을 읽어보길 권한다.

  find 메서드는 인자 3개를 받는다. 첫째는 start는 시작 경로이며 둘째는 maxDepth로 말 그대로 탐색할 최대 폴더 깊이를 의미한다. 마지막 세 번째는 탐색 로직을 결정하는 람다식이 들어가며 타입은 predicate이다. 위 예에서 모든 .js로 끝나는 javascript파일을 찾았다.

try/with 문장으로 감싸져 있다는 것을 깨달았을 것이다. Stream들은 AutoCloseable를 구현하고 있으며 이 경우 반드시 명시적으로 스트림을 닫아 주어야만 한다. 이는 뒷쪽에서 IO 연산이 수행되기 때문이다.


http://dextto.tistory.com/215



반응형

'개발공부 > JAVA8' 카테고리의 다른 글

JAVA8 - 람다  (0) 2018.07.18

+ Recent posts