Collector
·
자바/스트림
1. Collector 구현하기 - Collector를 구현한다는 것은 Collector 인터페이스의 메서드를 가지고 구현한다는 것인데, Collector 인터페이스는 아래와 같이 생겼다. Public interface Collector{ Supplier supplier(); // 작업 결과를 저장할 공간을 제공 BiConsumer accumulator(); // 스트림의 요소를 수집할 방법을 제공 BinaryOperator combiner(); // 두 저장공간을 병합할 방법을 제공(병렬 스트림) Function finisher(); // 결과를 최종적으로 변환할 방법을 제공 Set characteristics(); // Collector의 특성이 담긴 Set을 반환한다. .... } ( 직접 구현해야..
collect() 메서드(3) - groupingBy()
·
자바/스트림
1. groupingBy()에 의한 분류 - 아래의 코드처럼 그룹화를 하면 기본적으로 List에 담으며, toList()를 생략한다. Map stuByBan = Stream.of(stuArr) .collect(groupingBy(Stu3::getBan, toList())); // toList()가 생략 가능 !! Map stuByHak = Stream.of(stuArr) .collect(groupingBy(Stu3::getHak, toCollection(HashSet::new)); ( 또한 toSet()을 사용할 수도 있다. ) ( 아래의 Student의 정보가 있는 stu3클래스가 정의되어 있다고 가정하고 아래의 예제를 수행할 것이다. ) (1) 반별 기준으로 그룹화하기. (2) 성적별로 그룹화하기. ..
collect() 메서드(2) - partitioningBy()
·
자바/스트림
1. 그룹화와 분할 - groupingBy(), partitioningBy() - 그룹화는 스트림의 요소를 특정 기준으로 그룹화하는 것을 의미한다. - 분할은 스트림의 요소를 두 가지, 즉, 지정된 조건에 일치하는 그룹과 일치하지 않는 그룹으로의 분할을 의미한다. - 그룹화 메서드 groupingBy()는 스트림의 요소를 Function 매개변수로 받는다. - 분활 메서드 partitioningBy()는 스트림의 요소를 Predicate 매개변수로 받는다. - 그룹화와 분할 메서드는 매개변수의 차이만 있을 뿐 동일하다. 그러나, 만약 두 개의 그룹으로 나눠야 한다면 partitioningBy()가 더 빠르고, 그 외는 groupingBy()를 사용한다. - 그룹화와 분할의 결과는 Map에 담겨 반환된다...
collect() 메서드(1)
·
자바/스트림
1. collect() 메서드란? - 스트림의 요소를 수집하는 최종 연산으로 앞서 배운 리듀싱과 유사하다. - 어떻게 수집할 것인지에 대한 방법이 정의되어 있는 Collector가 있다. - Collector 인터페이스로 직접 구현도 가능하고 미리 작성된 Collectors 클래스를 사용할 수 있다. - collect() 메서드의 매개변수는 Collector를 필요로 한다. 즉, Collector를 구현한 클래스의 객체 이어야 한다는 뜻이다. ( 마치 sort() 메서드 위해서 Comparator가 필요한 것처럼 ) Object collect(Collector collector) Object collect(Supplier supplier, BiConsumer accumlator, BiConsumer co..
스트림의 최종 연산(조건 검사, 통계, 리듀싱)
·
자바/스트림
1. forEach() - peek()와 달리 스트림의 요소를 소모하는 최종연산자이다. void forEach(Consumer
Optional<T>와 OptionalInt
·
자바/스트림
1. Optional - Optional은 지네릭 클래스로 "T타입의 객체"를 감싸는 래퍼 클래스이므로, 모든 타입의 참조변수를 담을 수 있다. - 최종 연산의 결과를 그냥 반환하는 것이 아니라 Optional객체에 담아서 반환한다. - 또한 Optional 클래스는 null인지 아닌지 알려주는 정의된 메서드가 포함되어 있다. public final class Optional{ private final T value; // T타입의 참조변수 ... } - 아래는 Optional 클래스에 정의된 메서드들이다. (1) Optional.of() - static : 해당 객체에 값을 초기화한다. ( ex) Optional.of("abc"), Optional.of(new String("abc")) ) ( 만약 참..
스트림의 중간 연산(3)
·
자바/스트림
1. flatMap() - Stream를 Stream로 변환 - 스트림의 요소가 배열이거나 map()의 연산결과가 배열인 경우, 즉 스트림 타입이 Stream라면, Stream로 바꿀 때, flatMap()을 사용한다. - 아래의 예시를 한번 보자. ( Stream을 만들어주기 위해 Arrays.stream(T[])를 사용했다. ) ( 그러나, map() 사용하여 변환해 주었더니, Stream의 형태가 되었다. ) ( 이렇게 되면, 우리가 원하는 Stream으로 못 만들어준다. ) ( 그러므로, 위에서 말한대로 flatMap() 메서드를 이용해서, 아래와 같은 형태를 만들어야 한다. ) 1-1. flatMap()을 이해하는 예제(1) : map() 대신 flatMap()을 사용하여 Stream 구조로 만..
스트림의 중간 연산(2)
·
자바/스트림
1. 변환 - map() - 스트림의 요소에 저장된 값 중에서 원하는 필드만 뽑아내거나 특정 형태로 변환해야 할 때가 있다. 이 때 사용하는 것이 아래와 같은 map() 메서드이다. Stream map(Function
스트림의 중간 연산(1)
·
자바/스트림
1. 스트림 자르기 - skip(), limit() - skip() 메서드는 지정한 매개변수만큼 스트림의 요소를 건너뛴다. - limit() 메서드는 지정한 매개변수만큼 스트림의 요소를 제한한다. - 기본형 Stream에서도 정의되어 있다. IntStream intStream = IntStream.rangeClosed(1, 10); // 1~10을 가진 intStream 변수 intStream.skip(3).limit(5).forEach(System.out::println); // 4, 5, 6, 7, 8 출력한다. 2. 스트림의 요소 걸러내기 - filter(), distinct() - filter()는 주어진 조건에 맞게 스트림의 요소를 걸러낸다. 사용방법은 아래의 코드를 보자. IntStream i..
스트림 만들기
·
자바/스트림
1. 컬렉션 - 컬렉션의 최고 조상인 Collection에 stream()이 정의되어 있으므로, Collection의 자손인 List와 Set을 구현한 컬렉션 클래스들은 모두 이 메서드로 스트림을 생성할 수 있다. - stream()은 아래와 같이 해당 컬렉션을 소스로 하는 스트림을 반환한다. Stream Collection.stream() 2. 배열 - Stream과 Arrays에 static 메서드로 아래와 같이 정의되어 있다. (1) Stream Stream.of(T... values) ex) Steam.of("a","b") //가변인자 (2) Stream Stream.of(T[]) ex) Stream.of(new String[] {"a","b"}) (3) Stream Arrays.stream(T[..
스트림의 기본 개념
·
자바/스트림
1. 스트림이란? - 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. - 스트림은 Iterator처럼 일회용이다. 즉, 한번 사용한 스트림은 필요하다면 다시 생성해야 한다. - 스트림은 작업을 내부 반복으로 처리한다. ( 내부 반복이란, 반복문을 메서드의 내부에 숨길 수 있다는 것을 의미한다. ) - 장점으로는 두 가지가 있는데, 아래와 같다. (1) 데이터 소스가 무엇이든지 간에 같은 방식으로 다룰 수 있다. (2) 코드의 재사용성이 높아진다. - 아래의 예시 String 배열과 List 배열을 보자. ( 그리고 이렇게 된 것을 정렬한다면, 아래와 같을 것이다. ) ( 데이터 소스가 정렬되는 것은 아니라는 것에 유의하자. ) ( 만약 다시 List(데이터소..