일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- bit manipulation
- array
- geometry
- Binary Tree
- Data Structure
- Method
- Math
- string
- two pointers
- implement
- Binary Search
- hash table
- 구현
- 자바
- Class
- 코테
- Stack
- Number Theory
- sorting
- greedy
- Counting
- Matrix
- dynamic programming
- simulation
- 코딩테스트
- java
- database
- Tree
- 파이썬
- SQL
- Today
- Total
목록Java (109)
코린이의 소소한 공부노트

[collect()] 1. Collector 인터페이스를 매개변수로 하는 스트림의 최종연산 2. reduce()는 전체에 대해 리듀싱, collect()는 그룹별로 리듀싱 // 스트림의 요소를 수집. 요소를 그룹화/분할한 결과를 컬렉션에 담아서 반환. 최종 연산의 핵심2 R collect(Collector collector) // Collector를 구현한 클래스의 객체를 매개변수로 R collect(Supplier supplier, BiConsumer accumulator, BiConsumer combiner) // 잘 안씀 [Collector] 1. 수집(collect)에 필요한 메서드를 정의해 놓은 인터페이스 2. collect()의 매개변수를 5개를 쓰려니 너무 많아서 인터페이스로 묶어둔 것이다...

[최종 연산이란?] 1. 연산 결과가 스트림이 아닌 연산 2. 스트림의 요소를 소모하므로 단 한 번만 적용이 가능하다. [최종 연산 종류] 1. 스트림의 모든 요소에 지정된 작업을 수행 – forEach( ), forEachOrdered( ) // 스트림 요소에 작업 수행(스트림을 소비O) void forEach(Consumer

[Optional] 1. T타입 객체의 래퍼클래스이다. public final class Optional { private final T value; // T 타입의 참조변수. null을 포함한 모든 종류의 객체 저장 가능 ... } 2. Optional가 필요한 이유 - null을 직접 다루는 것은 위험하다. 직접 다루다보면 NullPointerException이 발생할 수 있다. - 예외처리를 하려면 try-catch문을 이용하거나, null을 체크하기 위한 if문이 필수적이다. 이때문에 코드가 지저분해진다. - null을 간접적으로 다루려면 null을 참조변수에 직접 넣기보다는 Optional 객체에 넣은 다음, 그 주소값을 참조변수에 저장한다. - 이렇게 하면 참조변수 값을 불러왔을 때 항상 값이..

[중간 연산이란?] 1. 연산 결과가 스트림인 연산 2. 반복적으로 적용이 가능하다. [중간 연산 종류] 1. 스트림 자르기: skip(), llimit() // 앞에서부터 n개 건너뛰기 Stream skip(long n) // maxSize 이후의 요소는 잘라냄 Stream limit(long maxSize) // 예시 IntStream intStream = IntStream.rangeClosed(1, 10); // 12345678910 intStream.skip(3).limit(5).forEach(System.out::print); // 45678 (3개 건너뛰고, 5개 자름) 2. 스트림의 요소 걸러내기: filter(), distinct() // 조건에 맞지 않는 요소 제거 Stream filte..

1. 컬렉션으로부터 스트림 생성하기 // Coolection 인터페이스의 메서드 Stream stream() List list = Arrays.asList(1,2,3,4,5); Stream intStream = list.stream(); // List를 스트림으로 변환 // 스트림의 모든 요소 출력 intStream.forEach(System.out::print);; // 12345 intStream.forEach(System.out::print);; // 에러. 이미 스트림이 닫혔다. // intStream = list.stream(); 을 이용해 다시 만든 후 // forEach()를 사용하면 된다. 2. 배열로부터 스트림 생성하기 // 1) 객체 배열로 스트림 만들기 Stream strStream ..

[스트림의 정의] 1. 스트림은 다양한 데이터 소스(컬렉션, 배열)를 표준화된 방법으로 다루기 위한 것이다. - 컬렉션 프레임워크의 경우, List와 Set을 다루는 방법과 Map을 다루는 방법이 달라 완전히 표준화되었다고 말하긴 어렵다. - 하지만 데이터 소스를 스트림으로 만들고 나면, 다루는 방법은 똑같다. 2. 스트림은 데이터의 연속적인 흐름을 말한다. - 중간 연산을 0~n번 거친 후 최종 연산 0~1번을 거쳐 결과가 나온다. // Stream Collection.stream()을 이용해 스트림으로 변환(생성) List list = Arrays.asList(1,2,3,4,5); Stream intStream = list.stream(); // 컬렉션을 스트림으로 Stream strStream = ..

[메서드 참조] - 하나의 메서드만 호출하는 람다식을 더 간단하게 표현하는 방법 1. 메서드별 참조 방법 // 1) static메서드 참조 (x) -> ClassName.method(x) // 이 람다식을 ClassName::method // 이렇게 참조 가능 // 2) 인스턴스메서드 참조 (obj, x) -> obj.method(x) // 이 람다식을 ClassName::method // 이렇게 참조 가능 // 3) 특정 객체 인스턴스메서드 참조 - 거의 사용하지 않는다. (x) -> obj.method(x) // 이 람다식을 obj::method // 이렇게 참조 가능 // 결국 우리가 사용할 메서드 참조 방법은 // 클래스이름::메서드이름 형태 // 메서드 참조를 보고 이해가 되지 않는다면 // 다..

[java.util.function 패키지] - 자주 사용되는 다양한 함수형 인터페이스를 제공하는 패키지 1. 기본 함수형 인터페이스 - 함수는 반환값이 0개 또는 1개이다. // 1) java.lang.Runnable 인터페이스 void run() // 매개변수X, 반환값X // 2) Supplier 인터페이스 T get() // 매개변수X, 반환값 1개 // 3) Consumer 인터페이스 void accept(T t) // 매개변수 1개, 반환값X -> Supplier와 반대 // 4) Function 인터페이스 R apply(T t) // 매개변수 1개, 반환값 1개 -> 일반적인 함수 // 5) Predicate 인터페이스 boolean test(T t) // 매개변수 1개, 반환값 논리형 ->..

[함수형 인터페이스] 1. 정의: 단 하나의 추상 메서드만 선언된 인터페이스 @FunctionalInterface // 생략할 수 있지만 이 애너테이션을 달아두면 컴파일러가 확인해줌 interface MyFunction { // 인터페이스의 추상 메서드는 모두 public abstract public abstract int max(int a, int b); // 제어자 생략 가능 public abstract int max2(int a, int b); // 함수형 인터페이스의 추상 메서드는 1개여야 하기 때문에 // 애너테이션을 달면 에러 발생. 달지 않으면 에러X } // MyFunction 구현 MyFunction f = new MyFunction(){ // 익명 클래스의 선언 + 객체 생성 publi..

[람다식의 정의] 1. 함수(메서드)를 간단한 식(expression)으로 표현한 것 int max(int a, int b){ return a>b ? a : b; } // 짧게 표현한 식 (a, b) -> a>b ? a : b 2. 함수에 이름을 따로 붙이지 않으므로 익명 함수(anonymous function)라고도 한다. - 함수와 메서드는 근본적으로 동일하다. - 함수는 일반적으로 사용하는 용어로 클래스에 독립적이다. - 메서드는 객체지향에서 사용하는 용어로 클래스에 종속적이다. [람다식 작성 방법] 1. 메서드의 이름과 반환 타입을 제거하고 ‘->’를 블록{} 앞에 추가한다. int max(int a, int b){ return a>b ? a : b; } // 바꾸게 되면 (int a, int b..