프로그래밍 노트/JAVA

Stream API 에서는 커스텀하기 집계 결과물을 만드는 reduce()라는 메소드를 제공한다. (sum(), average(), count(), max(), min() 말고도 커스텀하게 사용할 경우 사용) Stream, IntStream, LongStream, DoubleStream 각 인터페이스에는 reduce() 메소드가 오버로딩 되어 있다. (매개타입 XXXOperator, 리턴 타입 OptionalXXX, int, long, double) 스트림 요소가 전혀 없을 경우 디폴트 값인 identity 매개값이 리턴된다. XXXOperator 매개값은 집계 처리를 위한 람다식 을 대입하는 곳이다. public static void main(String[] args){ List workerList =..
sum(), count(), average(), max(), min() 집계(Aggregate) 는 최종 처리 기능이며, 요소들을 처리한 후 카운팅, 합계, 평균값, 최대값, 최소값 등과 같이 하나의 값으로 산출하는 것을 말한다. => 대량의 데이터를 가공해서 축소하는 리덕션(Reduction)이라고 볼 수 있다. 스트림에서 제공하는 기본 집계 집계 메서드에서는 리턴 값으로 OptionalXXX클래스를 리턴한다. OptionalXXX는 자바8 java.util 패키지의 Optional, OptionalDouble, OptionalInt, OptionalLong 클래스타입을 말한다. (value-based class) 이 객체에서 값을 얻기 위해서는 get(), getAsDouble(), getAsInt(..
루핑(looping)은 요소 전체를 반복하는 것을 말한다. Stream API에서 루핑에 해당하는 메소드로는 peek, forEach가 존재한다. 이 둘의 차이점은 peek() 은 중간 처리 메소드이고, forEach()는 최종 처리 메소드라는 점이다. 기억해야할 점은, 중간 처리 메소드는 최종 처리 메소드가 실행되지 않으면 동작하지 않는다는 점이다. (예전 포스팅에도 적어놨음, 중간 처리 메소드는 최종 처리 메소드가 실행되기 전까지 지연(lazy) 됨) 따라서 peek()을 사용하고 최종 처리 메소드가 없으면 스트림은 동작하지 않게 된다. public static void main(String[] args){ int[] intArr = {1, 2, 3, 4, 5}; // 최종처리 메소드가 없으면 동작하..
요소가 최종 처리되기 전에 중간 단계에서 요소를 정렬해서 최종 처리 순서를 변경할 수 있다. sorted() => 객체의 Comparable 구현 방법에 따라 정렬 sorted(Comparator) => 객체를 주어진 Comparator에 따라 정렬 정렬과 관련해서 기존에 사용하고 있던 Worker 클래스를 변형하였다. Comparable 인터페이스를 구현하여, 나이(age)기준으로 오름차순으로 정렬할 수 있게 변경하였다. public class Worker implements Comparable{ private String name; private int age; public Worker(String name, int age) { super(); this.name = name; this.age = ag..
매핑(mapping)은 중간 처리 기능으로 스트림의 요소를 다른 요소로 대체하는 작업을 말한다. 1. flatMapXXX() 메소드 flatMapXXX() 메소드는 요소를 대체 하는 복수 개의 요소들로 구성된 새로운 스트림을 리턴한다. public static void main(String[] args){ List inputList1 = Arrays.asList("java8 lamda", "stream mapping"); inputList1.stream() .flatMap(data -> Arrays.stream(data.split(" "))) // 요소별로 단어를 뽑아 스트림 재생성 .forEach(System.out::println); System.out.println(); List inputList2..
필터링은 중간 처리 기능으로 요소를 걸러내는 역할을 한다. distinct(), filter() 메소드는 모든 스트림이 가지고 있는 공통 메소드이다. distinct() 중복을 제거하는 메소드로, Object.equals(Object o)가 true일 경우 동일 객체로 판단하여 제거한다. filter(Predicate ...) 매개값으로 주어진 Predicate가 true를 리턴하는 요소만 필터링한다. public static void main(String[] args){ List names = Arrays.asList("강성현", "강성현", "깡냉", "강냉", "깡냉"); names.stream() .distinct() // 중복 제거 .forEach(System.out::println); Syst..
중간 처리와 최종 처리 스트림 은 데이터의 필터링, 매핑, 정렬, 그룹핑 등의 중간처리 와 합계, 평균, 카운팅, 최대값, 최소값 등의 최종 처리 를 파이프라인(pipelines)으로 해결한다. 스트림 = 중간처리 + 최종처리 로 구성 파이프라인 => 여러 개의 스트림이 연결되어 있는 구조를 말함 중간 스트림이 생성될 때 바로 요소들이 중간 처리되는 것이아니라, 최종 처리가 설정(시작)되기 전까지 중간처리는 지연된다. 최종처리가 시작되면 비로소 컬렉션 요소가 하나씩 중간 스트림에서 처리되고 최종 처리까지 오게된다. public static void main(String[] args){ List list = Arrays.asList( new Member("깡냉", Member.MALE, 30), new M..
스트림의 종류 자바8에 추가된 java.util.stream 패키지를 살펴보자 https://www.developer.com/java/data/stream-operations-supported-by-the-java-streams-api.html 모든 스트림에서 사용할 수 있는 공통 메소드들은 BaseStream에 정의되어 있으며, Stream은 객체 요소를 처리하는 스트림, IntStream, LongStream, DoubleStream은 각각 기본 타입인 int, long, double 요소를 처리하는 스트림이다. 1. 컬렉션으로부터 스트림 얻기 List list = Arrays.asList("가", "나", "다"); Stream stream = list.stream(); // Collection ...
스트림 소개 스트림(Stream)은 자바8부터 추가된 반복자이며, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해준다. 반복자 스트림 자바 7 까지는 Iterator를 사용했지만, 자바 8에서는 Stream이란 것을 사용할 수 있다. // iterator List list = Arrays.asList("콘성현", "강성현", "깡냉"); // Iterator Iterator iterator = list.iterator(); while(iterator.hasNext()){ String name = iterator.next(); System.out.println(name); } // stream List list = Arrays.asList("콘성현", "강성현", "깡냉"); // S..
항상 읽어도 이해하기 힘들 부분이었으나, 이번 기회에 확실히 이해하고 정리를 하게 되었다. Java에서 String을 생성하는 방식은 두가지가 있다. new 연산자를 이용하는 방법 (String str = new String("Hello")); 리터럴을 이용하는 방법 (String str = "Hello"); new 연산자를 통해서 생성하게 되면 String은 Heap영역에 존재하게 된다. 하지만 리터럴을 이용할 경우 string contstant pool이라는 영역에 존재하게 된다. (constoanl pool은 PermGen영역에 존재하게 된다.) 차이점을 살펴보자. @org.junit.Test public void testStringEquality(){ final String literal = "H..
깡냉쓰
'프로그래밍 노트/JAVA' 카테고리의 글 목록 (4 Page)