JAVA
-
스트림의 그룹화와 분할JAVA/스트림 2023. 8. 9. 00:55
partitioningBy() - 스트림을 두 개로 분할한다. groupingBy() - 스트림을 n 개로 분할한다. 둘 다 Collectors에 있는 메서드이다. 전체가 아니라 나눈 다음에 그룹별로 무언가를 할 수 있는게 장점이기 때문에 이번 포스팅에서는 그것에 대해서 쓸 것이다. partitioningBy() - 스트림을 두 개로 분할 Map stuBySex = stuStream .collect(partitioningBy(Student::isMale)); // 학생들을 성별로 분할함 List maleStudent = stuBySex.get(true); // Map에서 남학생만 가져옴 List femaleStudent = stuBySex.get(false); // Map에서 여학생만 가져옴 studen..
-
collect()와 CollectorsJAVA/스트림 2023. 8. 9. 00:33
두 가지 최종연산의 차이 - reduce()와 collect() reduce() : 전체에 대한 리듀싱 collect() : 그룹별로 나눠서 리듀싱 collect() : Collector를 매개변수로 하는 스트림의 최종연산 Collector : 인터페이스 Colltectors : 구현체 Collector라는 인터페이스에 Collectors라는 클래스가 기능을 구현해서 그 기능들을 가져다가 사용하면 된다. 스트림을 컬렉션으로 변환 - toList(), toSet(), toMap(), toCollection() List names = stuStream.map(Student::getName) .collect(Collectors.toList()); ArrayList list = names.stream() .co..
-
OptinalJAVA/스트림 2023. 8. 9. 00:10
T타입의 객체 래퍼클래스 - Optional public final class Optional { private final T value; // T타입의 참조변수 .... } null을 직접 다루는 것은 위험하기 때문에 Optional을 이용해서 간접적으로 null을 다루는 것이다. Optinal 객체 생성하기 String str = "abc"; Optional optVal = Optional.of(str); Optional optVal = Optional.of("abc"); Optional optVal = Optional.of(null); // NullPointerException 발생 Optional optVal = Optional.ofNullable(null); // 가능 null이 될 수 있으면 ..
-
스트림의 연산 - 중간 연산JAVA/스트림 2023. 8. 8. 22:47
1. 스트림 자르기 - skip(), limit() Stream skip(long n) // 앞에서부터 n개 건너뛰기 Stream limit(long maxSize) // maxSize 이후의 요소는 잘라냄 IntStream intStream = IntStream.rangeClosed(1, 10); // 12345678910 intStream.skip(3).limit(5).forEach(System.out::print); // 45678만 출력 2. 스트림 요소 걸러내기 - filter(), distinct() Stream filter(Predicate
-
스트림 만들기JAVA/스트림 2023. 8. 8. 21:33
스트림 만들기 - 컬렉션 Collection 인터페이스의 stream()을 이용해서 컬렉션을 스트림으로 변환 List list = Arrays.asList(1, 2, 3, 4, 5); Stream intStream = list.stream(); // 스트림의 모든 요소를 출력 intStream.forEach(System.out::print); // 12345 intStream.forEach(System.out::print); // 스트림이 닫혔기 때문에 에러 forEach는 최종연산이기 때문에 1번까지만 호출이 가능하다. 그래서 2번째 forEach에서는 에러가 난다. intStream = list.stream(); intStream.forEach(System.out::println); 두 번째 forE..
-
스트림JAVA/스트림 2023. 8. 8. 20:54
스트림은 데이터를 추상화해서 데이터 소스가 무엇이든 간에 같은 방식으로 다룰 수 있게 하는 기능이다. 스트림은 데이터 소스를 변경하지 않고 읽기만 할 뿐이며 일회용으로 사용된다. 스트림의 과정 1. 스트림 생성 2. 중간 연산 3. 최종 연산 데이터 소스 --------> 중간 연산 --------> 최종 연산 컬렉션, 배열 등 n번 가능 1번만 가능 중간 연산 - 연산결과가 스트림인 연산. 반복적으로 n번 적용 가능 최종 연산 - 연산결과가 스트림이 아닌 연산. 단 한번만 적용가능(스트림의 요소를 소모) stream.distinct().limit(5).sorted().forEach(System.out::println) 여기서 distinct(), limit(5), sorted() 등의 연산이 중간연산이..
-
람다식JAVA/람다 2023. 8. 7. 14:33
람다식을 간단히 표현하자면 함수(메서드)를 간단히 표현한 것이다. int max(int a, int b) { return a > b ? a : b; } 위와 같은 메서드가 있을 때 람다식을 표현하면 아래와 같이 짧게 표현이 가능하다. (int a, int b) -> a > b ? a : b 반환값이 있는 경우, 식이나 값만 적고 return 문을 생략할 수 있다. return을 생략할 때에는 ;를 생략한다. (a, b) -> a > b ? a : b 또한 매개변수의 타입이 추론 가능하면 생략도 가능하다. 람다식 작성 시 주의사항 1. 매개변수가 하나인 경우, 괄호는 생략 가능 (단, 타입이 있을 때는 생략 불가) ---> int a -> a * a는 안됨 (int a) -> a * a라 해야지 에러가 안..