람다
-
람다와 스트림 - collect() part1백엔드/자바 2023. 4. 17. 06:45
collect()란? collect()란 스트림의 최종 연산 중 하나의 과정이다. 사실 다른 최종 연산과 같이 다뤄야하나 비중이 크다보니 별도로 다룰 것이다. collect()는 간단히 말하면 다양한 콜렉션 자료들을 쉽게 가공할 수 있게 도와주는 메서드다. collect()와 collectors collect()는 이전에 배운 reduce()가 가진 기능 뿐 아니라 더욱 다양한 기능을 가진다. 그런데 앞서 reduce()에선 직접 연산 과정을 다 적어줬다. 하지만 collect()의 경우 더욱 복잡하고 다양한 자료 가공을 하다보니 직접 적는건 힘들다. 그렇다보니 collect()를 편하게 사용하기 위해 필요한 것이 바로 collectors 클래스다. static 클래스인 collectors는 다양한 컬렉..
-
람다와 스트림 - 최종 연산백엔드/자바 2023. 4. 17. 05:40
스트림의 최종 연산이란? 람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중 sgcomputer.tistory.com 이전 파트에서 배웠듯이 스트림은 일반적인 객체와 달리 한번 사용하고 나면 재활용이 불가능하다고 배웠다. 그때 이 사용의 기준이 되는 것이 바로 최종 연산이다. 이전에 써먹었던 그림을 다시 가져오면 위와 스트림은 위와 같은 과정으로 사용하게 된다. 컬렉션 데이터에 대한 스트림 요소를 생성한 뒤 중간 연산을 통해 데이터를 가공한다. 그 뒤에 최종 연산 과정에서 스트림 요소를 소모하면서 스트림의 사용이 끝..
-
람다와 스트림 - 중간 연산 part 1백엔드/자바 2023. 2. 11. 07:08
람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중 sgcomputer.tistory.com 지난 번 람다와 스트림의 정의와 특징을 설명하면서 다음과 같은 그림을 보여준 적이 있다. 간단히 이야기하자면 컬렉션의 스트림 생성 및 연산에 관한 그림이었다. 오늘은 이중에서 중간 연산에 대해서 설명하고자 한다. 중간연산이란? 중간 연산은 컬렉션을 스트림화 한 후 사용자의 필요에 따라 스트림의 데이터들을 재가공하는 과정을 말한다. 중간 연산을 통해서 데이터를 자르거나 조건에 따라 거르거나 정렬하는 등의 다양한 작업을 할 수 ..
-
람다와 스트림 - 스트림 만들기백엔드/자바 2021. 11. 9. 21:49
2021.09.15 - [백엔드/자바] - 람다와 스트림 - 스트림의 정의와 특징 람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중 sgcomputer.tistory.com 이전 파트에서는 스트림의 정의와 특징에 대해서 알아봤다. 간단히 복습해보자면 스트림이란 컬렉션의 데이터를 쉽게 다루기 위해 만들어진 인터페이스다. List든 Set이든 Map이든 형태에 구애받지 않고 데이터만 뽑아서 스트림 속에 넣고 가공할 수있다. 그렇다보니 스트림은 원본 데이터에 영향을 주지 않고 데이터만 손쉽게 뽑아 가공이 가능하다. 물론..
-
람다와 스트림 - 스트림의 정의와 특징백엔드/자바 2021. 9. 15. 00:24
스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터페이스로 구성된 것을 알 수 있다. 이 중에서 List와 Set은 사용법이 비슷하지만, Map은 그 성격이 다르다. 이는 즉 컬렉션을 다룰 때 List, Set과 달리 Map을 다루기 위한 방법 또한 다르단 것을 의미한다. 스트림은 이러한 불편함을 해소하고자 만들어졌다. 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 필요한 메서드들을 정의한 인터페이스다. 예시를 한번 보도록 하자. 예를 들어 위와 같이 1부터 5까지 숫자를 가진 배열과 리스트가 있다고 가정해보자. 이제 이 배열과 리스트 중에서 짝수만 출력하려면 어떻게 해야할까? 일반적으로..
-
람다와 스트림 - 메소드 참조(method reference)백엔드/자바 2021. 9. 14. 22:35
이전에 여러 파트에서 언급했듯이 위와 같이 람다식을 사용하면 메서드를 간단하게 표현이 가능하다. 물론 사용에 제한이 있긴하지만 그럼에도 불구하고 람다식은 그 효율성이 높다. 하지만 그럼에도 불구하고 이 람다식을 더 줄일 수 있는 방법이 있으니 바로 메소드 참조다. 위 코드는 문자열을 매개변수로 받아 정수형으로 반환하는 Function 참조변수를 표현하고 있다. Function 참조 변수는 람다식으로 이뤄져 굉장히 간략하게 식을 표현하고 있다. 하지만 이런 경우 메소드 참조를 이용하면 람다식을 더욱 간략하게 표현이 가능하다. 메서드 참조를 적용하면 첫번째 코드를 위와 같이 변경이 가능하다. 람다식이 단 하나의 메소드만 호출할 경우에 해당 람다식에서 불필요한 매개변수를 없앤다. 그리고 '클래스명::메서드명'..
-
람다와 스트림 - 컬렉션과 함수형 인터페이스백엔드/자바 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의 참조변수..