java
-
람다와 스트림 - collect() part 2백엔드/자바 2023. 4. 19. 09:08
람다와 스트림 - collect() part1 collect()란? collect()란 스트림의 최종 연산 중 하나의 과정이다. 사실 다른 최종 연산과 같이 다뤄야하나 비중이 크다보니 별도로 다룰 것이다. collect()는 간단히 말하면 다양한 콜렉션 자료들을 쉽 sgcomputer.tistory.com 지난 번에 이어서 이번에는 collect()의 여러 기능 중 하나인 분할에 대해서 공부해보자. collect()는 스트림으로 만들어진 데이터를 쉽게 다루기 위한 메서드라고 이전 파트에서 배웠다. 하지만 이전 파트에서는 단일 스트림을 다루는 방법에 대해서만 배웠다. 이번에는 collect()를 이용해 스트림을 분할하여 나눈 데이터를 다루는 방법을 배울 것이다. partitioningBy()와 groupi..
-
람다와 스트림 - collect() part1백엔드/자바 2023. 4. 17. 06:45
collect()란? collect()란 스트림의 최종 연산 중 하나의 과정이다. 사실 다른 최종 연산과 같이 다뤄야하나 비중이 크다보니 별도로 다룰 것이다. collect()는 간단히 말하면 다양한 콜렉션 자료들을 쉽게 가공할 수 있게 도와주는 메서드다. collect()와 collectors collect()는 이전에 배운 reduce()가 가진 기능 뿐 아니라 더욱 다양한 기능을 가진다. 그런데 앞서 reduce()에선 직접 연산 과정을 다 적어줬다. 하지만 collect()의 경우 더욱 복잡하고 다양한 자료 가공을 하다보니 직접 적는건 힘들다. 그렇다보니 collect()를 편하게 사용하기 위해 필요한 것이 바로 collectors 클래스다. static 클래스인 collectors는 다양한 컬렉..
-
람다와 스트림 - Optional<T>백엔드/자바 2023. 4. 17. 00:38
그림 1과 같은 코드가 있다고 가정해보자. 만약 저 상태로 실행한다면 그림 2와 같은 결과를 확인할 수 있다. 변수 nul은 null을 가지고 있기 때문이다. 그렇다면 이 코드에서 NullPointException이 발생하지 않도록 해보자. 아주 간단하게 나타나면 위와 같은 코드로 나타낼 수 있을 것이다. 물론 이건 한줄짜리 코드라 간단해보이지만 코드가 길어진다면 null체크 코드만으로도 복잡해보일 것이다. 만약 이걸 더 깔끔하게 나타내려면 어떻게 해야할까? 바로 Optional 클래스를 사용해주면 된다. Optional는 지네릭 클래스로서 모든 타입의 참조 변수를 감싸는 래퍼 클래스다. 위의 코드에서 확인해보면 알겠지만 Optional 타입의 변수가 String타입의 변수를 저장한 것을 볼 수 있다. ..
-
람다와 스트림 - 중간 연산 part 2백엔드/자바 2023. 2. 13. 05:47
람다와 스트림 - 중간 연산 part 1 람다와 스트림 - 스트림의 정의와 특징 스트림의 정의와 그 필요성 한마디로 말하면 컬렉션이나 배열을 다루기 쉽게 만든 것이다. 기존의 컬렉션 프레임웍을 보면 위와 같이 List, Set, Map의 인터 sgcomputer.tistory.com 이전 글에서 우리는 스트림의 중간 연산에 대해 공부해봤다. 간단히 복습해보자면 스트림 중간 연산은 컬렉션 데이터를 쉽게 재가공하기 위해 존재한다. 그렇기에 연산 반복이 가능하고 반환 데이터의 타입이 Stream이다. 오늘은 지난 번에 이어 남은 중간 연산들에 대해 공부해보고자 한다. 중간 연산 - Map(): 스트림의 요소 변경 이전에 공부한 중간 연산 메서드 sorted(), skip() 등은 컬렉션의 데이터들을 거르거나 ..
-
람다와 스트림 - 중간 연산 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까지 숫자를 가진 배열과 리스트가 있다고 가정해보자. 이제 이 배열과 리스트 중에서 짝수만 출력하려면 어떻게 해야할까? 일반적으로..
-
람다와 스트림 - 메소드 참조(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..