lambda 2

Lambda를 이용한 Lazy Initialization

Functional Programming in Java 8 책의 6장에 Lambda를 이용하여 Lazy Initialization을 하는 방법이 나온다.이 예제는 Heavy 객체의 생성을 Supplier 인터페이스를 이용해서 사용할 시점까지 지연시키는 예제다.하지만 이 예제는 Heavy 클래스가 아닌 또 다른 heavy한 객체를 생성해야 할 때 매번 해당 클래스에 대한 HeavyInstanceHolder 클래스를 만들어 주어햐 하는 단점이 있다. Jake라는 분이 이를 해결한 방법 Blog로 정리해 놓았다. 요점은 Heavy 클래스를 Lazy로 생성하는 부분을 T 형 타입으로 받아서 처리하면 된다. 그런데 synchronized 키워드를 붙여 thread-safe 하게 처리한 부분이 좀 이상해서 gith..

Tips/Java 2016.09.02

Files.find를 이용하여 디렉토리 내 모든 파일 리스트 출력하기

Files 클래스에는 Java 8에서 추가된 find라는 메소드가 있다.Funtional Programmin in Java 8 책의 3장에 ListSubDir.java 예제가 있는데, 해당 디렉토리의 하부 디렉토리까지만 가져오므로 완전한 예가 아니다.find를 이용해서 어떤 디렉토리에 존재하는 모든 파일을 가져오도록 Stream API를 이용하여 작성해 보자.Path start = Paths.get(".");int maxDepth = 5; // Integer.MAX_VALUE로 하면 모든 파일을 가져올 수 있다Files.find(start, maxDepth, (path, attr) -> true) .forEach(System.out::println);만약 어떤 특정 파일 속성을 가지는 파일만 가져오고 싶..

Tips/Java 2016.09.01