lambda
-
람다와 스트림 - 중간 연산 part 1백엔드/자바 2023. 2. 11. 07:08
람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중 sgcomputer.tistory.com 지난 번 람다와 스트림의 정의와 특징을 설명하면서 다음과 같은 그림을 보여준 적이 있다. 간단히 이야기하자면 컬렉션의 스트림 생성 및 연산에 관한 그림이었다. 오늘은 이중에서 중간 연산에 대해서 설명하고자 한다. 중간연산이란? 중간 연산은 컬렉션을 스트림화 한 후 사용자의 필요에 따라 스트림의 데이터들을 재가공하는 과정을 말한다. 중간 연산을 통해서 데이터를 자르거나 조건에 따라 거르거나 정렬하는 등의 다양한 작업을 할 수 ..
-
람다와 스트림 - 스트림의 정의와 특징백엔드/자바 2021. 9. 15. 00:24
스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중에서 List와 Set은 사용법이 비슷하지만, Map은 그 성격이 다르다. 이는 즉 컬렉션을 다룰 때 List, Set과 달리 Map을 다루기 위한 방법 또한 다르단 것을 의미한다. 스트림은 이러한 불편함을 해소하고자 만들어졌다. 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 필요한 메서드들을 정의한 인터페이스다. 예시를 한번 보도록 하자. 예를 들어 위와 같이 1부터 5까지 숫자를 가진 배열과 리스트가 있다고 가정해보자. 이제 이 배열과 리스트 중에서 짝수만 출력하려면 어떻게 해야할까? 일반적으로..
-
람다와 스트림 - 컬렉션과 함수형 인터페이스백엔드/자바 2021. 9. 1. 19:38
JDK 1.8부터는 함수형 인터페이스가 추가됐고, 그와 더불어 컬렉션 프레임웍을 편하게 사용할 수 있도록 컬렉션의 인터페이스에 디폴트 메서드가 추가됐다. 그 중 일부는 함수형 인터페이스를 사용하는데 이번 파트에서 그러한 메서드들에 대해 설명한다. 인터페이스 메서드 설명 Collection boolean removeIf(Predicate filter) 조건에 맞는 요소 삭제 List void replaceAll(UnaryOperator operator) 모든 요소를 변환하여 대체 Iterable void forEach(Consumer action) 모든 요소에 작업 action을 수행 Map V compute(K key, BiFunction f) 지정된 키의 값에 작업 f를 수행 V computeIfAbs..
-
람다와 스트림 - Predicate의 결합백엔드/자바 2021. 9. 1. 15:05
람다와 스트림 - 함수의 결합 수학에서 두 개의 함수를 결합할 수 있는 것처럼 자바에선 두 람다식을 결합할 수 있도록 하고 있다. 그리고 당연히 미리 준비된 메서드만 가져다 쓰면 된다. andThen() 예를 들어 위와 같은 코드가 sgcomputer.tistory.com 이전 파트에서 설명했듯이 Function 타입의 참조변수끼리는 결합이 가능하다. 그리고 이러한 결합은 Predicate타입의 참조변수끼리도 가능하다. 예를 들어서 위와 같은 메서드가 있다고 가정해보자. if의 조건을 보면 논리 연산자 &&으로 조건이 이어진 것을 볼 수 있을 것이다. 이러한 논리 연산을 Predicate 간에도 할 수 있다. and() - && 예를 들어 위와 같은 코드가 있다고 가정해보자. Predicate의 참조변수..
-
람다와 스트림 - 함수의 결합백엔드/자바 2021. 8. 25. 19:57
수학에서 두 개의 함수를 결합할 수 있는 것처럼 자바에선 두 람다식을 결합할 수 있도록 하고 있다. 그리고 당연히 미리 준비된 메서드만 가져다 쓰면 된다. andThen() 예를 들어 위와 같은 코드가 있다고 가정해보자. 참조변수 ft1은 10진수를 넣으면 2진수로 반환하는 람다식을 저장하고 있다. 반면 참조변수 ft2는 2진수를 넣으면 10진수로 반환하는 람다식을 저장하고 있다. 만약 이 두 개의 함수를 합치고 싶다면 어떻게 해야할까? 그럴땐 andThen을 쓰면 된다. 위 코드와 같이 두 개의 함수를 andThen()메서드로 합쳐주면 두 함수는 하나로 합성된다. 이때 데이터의 흐름은 "ft1 (10진수 -> 2진수) => ft2 (2진수 -> 10진수)"로 된다. 그래서 정수 10을 입력하면 정수 1..
-
람다와 스트림 - java.util.function - part2백엔드/자바 2021. 8. 25. 14:44
람다와 스트림 - java.util.function - part1 이전 람다 파트에선 람다란 무엇인지, 람다를 사용하기 위한 방법, 함수형 인터페이스 등에 대해서 배웠다. 다시 한번 간단하게 복습하면 다음과 같다. - 람다식은 익명 객체를 간략하게 만든 표 sgcomputer.tistory.com 이전 파트에선 함수형 인터페이스를 쉽게 사용할 수 있게 만든 패키지 java.util.function에 대해 알아봤다. 이번 파트에서는 추가적으로 유용하게 쓸 수 있는 함수형 인터페이스에 대해서 알아보자. 매개변수가 두 개인 함수형 인터페이스 함수형 인터페이스 메서드 설명 BiConsumer void accept ( T t, U u ) 두 개의 매개 변수만 있고, 반환값이 없음 BiPredica..
-
람다와 스트림 - java.util.function - part1백엔드/자바 2021. 8. 24. 16:16
이전 람다 파트에선 람다란 무엇인지, 람다의 사용법, 함수형 인터페이스 등에 대해서 배웠다. 다시 한번 간단하게 복습하면 다음과 같다. - 람다식은 익명 객체를 간략하게 만든 표현식이다. - 익명 객체를 사용하려면 함수형 인터페이스가 필요하다. - 함수형 인터페이스를 통해 익명 객체를 사용 할 수 있고, 이때 익명 객체를 람다로 표현이 가능하다. 이제 예제를 보며 함수형 인터페이스와 람다 사용하는 방법을 복습해보자. 만약 두 숫자를 비교하는 기능을 하는 익명 객체를 만들어 사용해보고 싶다면? - 우선 함수형 인터페이스를 작성한다. - 형식에 맞게 람다식을 작성하고 함수형 인터페이스의 참조 변수에 람다식을 저장한다. - 참조 변수이용해서 숫자를 대입한 뒤 실행하여 결과값을 확인한다. 사실 예제가 간단해서 ..
-
람다와 스트림 - 람다식의 활용백엔드/자바 2021. 8. 24. 15:21
람다와 스트림 - 함수형 인터페이스 람다와 익명 객체() 람다와 스트림 - 람다식의 정의 람다식(Lambda Expression)이란? 자바 관련 예제를 보다보면 위와 같은 식을 코드를 볼 수 있다. 메서드들을 체이닝으로 이어준 것인데, 그 중에서 sgcomputer.tistory.com 이전 파트에서 익명 객체를 어떤식으로 만드는지, 그리고 그렇게 만들어진 익명 객체를 어떻게 람다식으로 간략히 표현하는지 알아봤다. 이번 파트에는 람다식을 활용한 다양한 예시를 알아보도록 하자. sort()에서의 람다 사용 위와 같이 String을 요소로 가지는 리스트를 정렬한다고 가정해보자. 이 리스트를 정렬할 때 Collections.sort()를 사용하는데 매개변수로 Comparator를 전달해야 한다. 하지만 위에..