전체 글 (8) 썸네일형 리스트형 알면 유용한 Java 8, 9 에서 추가, 변경된 Collection 관련 내용 openjdk11 을 사용하였습니다. 1. removeIf Java 8 에서 Collection 인터페이스에 removeIf 메소드가 추가되었습니다. removeIf 를 사용하면 Collection 에서 특정 조건의 엘리먼트 삭제 시 코드를 간결하게 작성할 수 있습니다. ArrayList 는 Collection 인터페이스의 default removeIf 를 사용하지 않고 따로 구현하여 O(n) 의 시간복잡도로 설계된 로직을 사용하기 때문에 ArrayList 의 removeIf 를 사용한다면 성능 이점도 볼 수 있습니다. removeIf 를 사용하지 않으면 다음과 같이 작성할 수 있습니다. List list = new ArrayList(List.of("ABC", "BC", "DC", "AA")); // i.. 자바 8 stream 의 lazy 자바 8에서 등장한 stream 은 lazy 로 동작합니다. lazy 는 연산이 필요할 때 연산을 한다는 의미입니다. lazy 는 stream 이 효율적으로 동작할 수 있게 하는 핵심입니다. 간단한 코드를 통해서 stream 을 사용했을 때와, for 문을 사용했을 때 연산 횟수(대략적인 성능)를 비교해 보고 lazy 가 어떻게 stream 을 효율적으로 동작할 수 있게 하였는지 알아보겠습니다. 연산 횟수 비교 문제: 주어진 (순서가 있는) 리스트에서 3 보다 크고 짝수인 첫 번째 수를 2배한 값을 구하세요. 기존의 for 문을 이용해 코드를 작성하면 연산 횟수가 몇 번인지 확인해 보겠습니다. "연산 횟수" 는 단순히 비교 연산을 몇 번 했는지, 곱하기 연산은 몇 번 했는지 정도를 나타냅니다. strea.. 자바 8 람다는 익명 클래스와 같을까? 이 글은 Get a Taste of Lambdas and Get Addicted to Streams by Venkat Subramaniam 를 보고 일부 내용을 정리한 글입니다. 자바 8에서 람다가 등장하면서 Functional Interface 타입으로 익명 클래스 대신 람다를 사용할 수 있게 되었습니다. Functional Interface 는 한 개의 추상 메소드를 가진 인터페이스입니다. 원래 사용하던 익명 클래스를 사용해도 되고 람다를 사용해도 돼서 람다를 사용하면 컴파일러가 익명 클래스로 변환하여 익명 클래스를 사용할 때와 동일하게 동작한다고 오해할 수 있습니다. 내부적으로 어떻게 다르게 동작하는지 알아보겠습니다. 컴파일 결과 비교 익명 클래스를 사용한 코드를 컴파일하여 결과를 확인해보겠습니다... 이전 1 2 3 다음