본문 바로가기

Knowledge Wiki

(169)
JAVA 스트림 최종 연산 - reduce(), collect(), forEach() 1. 스트림 최종 연산의 핵심은 reduce()와 collect() 2. 스트림 최종 연산 - forEach() void forEach(Consumer
JAVA Optional 객체 1. Optional T 타입 객체의 래퍼 클래스 null을 직접 다루는 건 NullPointerException 발생 소지가 있기 때문에 위험함. 또 null을 그대로 쓰면 null체크등 코드가 지저분해짐. 그래서 Optional를 사용해서 null을 간접적으로 다룸. 2. null대신 빈 Optional 객체를 사용하자 Optional optVal = null; // 이렇게 쓰지 말자!! Optional optVal = Optional.empty(); // 빈 객체로 초기화 Optional optVal = Optional.empty(); // 생략 가능 3. Optional.isPresent() Optional객체의 값이 null이면 false, 아니면 true를 반환 // ifPresent(Cons..
JAVA 스트림 중간 연산, map(), flatmap(), sorted() 1. 스트림 중간 연산의 핵심은 map()과 flatmap() 2. 스트림 중간 연산 - sorted() 연산 Comparator의 comparing()으로 정렬 기준을 제공 studentStream.sorted(Comparator.comparing(Student::getBan)) .forEach(System.out::println); 추가 정렬 기준을 제공할 때는 thenComparing()을 사용 studentStream.sorted(Comparator.comparing(Student::getBan) .thenComparing(Student::getTotalScore() .thenComparing(Student::getName) .forEach(System.out::println); 3. 스트림 중간..
JAVA 람다식 iterate(), generate() a1. 람다식 iterate(), generate() iterate()는 이전 요소를 seed로 해서 다음 요소를 계산한다. Stream evenStream = Stream.iterate(0, n -> n + 2); // 0, 2, 4, 6, ... generate()는 seed를 사용하지 않는다. Stream randomStream = Stream.generate(Math::random); Stream oneStream = Stream.generate(()->1); // 1, 1, 1, 1 ...
JAVA 스트림 14. 스트림 다양한 데이터 소스(컬렉션, 배열)를 표준화된 방법으로 다루기 위한 것 Collections Framework의 사용방법이 드디어 통일됨 JDK 1.8에 나옴 15. Collection을 Stream으로 변환할 수 있음 Stream intStream = list.stream(); 16. 스트림 사용법 1) 스트림 만들기 2) 중간 연산을 n번 수행하기 3) 최종 연산 1번해서 결과 얻기 17. 스트림의 특징 1) 스트림은 데이터 소스로부터 데이터를 읽기만할 뿐 변경하지 않는다. 2) 스트림은 Iterator처럼 일회용이다.(필요하면 다시 스트림을 생성해야 함) 3) 스트림은 최종 연산 전까지 중간연산이 수행되지 않는다. (지연된 연산) 지연된 연산이기 때문에 무한 스트림도 사용할 수 있다...
JAVA 메서드 참조 1. 메서드 참조(method reference) 하나의 메서드만 호출하는 람다식은 '메서드 참조'로 간단히 할 수 있다. Function f = (String s) -> Integer.parseInt(s); Function f = Integer::parseInt; // 메서드 참조, 위 코드와 동일한 의미 2. 생성자의 메서드 참조 Function s = (i) -> new MyClass(i); Function s = MyClass::new; // 메서드 참조, 위 코드와 동일한 의미
JAVA 함수형 인터페이스, function 패키지 1. 함수와 메서드의 차이 근본적으로 동일. 함수는 일반적 용어, 메서드는 객체지향개념 용어 함수는 클래스에 독립적, 메서드는 클래스에 종속적 2. 함수형 인터페이스 단 하나의 추상 메서드만 선언된 인터페이스 @FunctionalInterface 어노테이션을 붙이면 컴파일러가 문법 체크해줌. 쓰면 좋음. 추상 메서드를 선언할 때 'public abstract'는 생략 가능하다. 인터페이스 함수의 기본이 'public abstract' 니까. 3. 함수형인터페이스 타입의 매개변수는 람다식을 전달하면 된다는 뜻이다. // 선언 void aMethod(MyFunction f){ f.myMethod(); } // 호출 aMethod(()-> System.out.println("myMethod()")); 4. 함..
JAVA 람다식 6. 람다식(Lambda Expression) 함수를 간단한 '식(Expression)'으로 표현하는 방법 블록 안에 문장이 하나뿐일 때 괄호생략 가능하고 끝에 세미콜론(;) 붙이지 않는다 람다식은 익명 함수가 아니라 익명 객체이다..!! 익명 객체이기 때문에 함수형인터페이스 타입 변수로 다뤄야 한다. MyFunctino2 f = (a, b) -> a > b ? a : b;