함수적 인터페이스 (@FunctionalInterface) - 모든 인터페이스는 람다식의 타겟타입으로 사용할 수 없다. (= 모든 인터페이스가 람다식으로 대입될 수 없다.) - 람다식은 하나의 메소드를 구현하는 것이기 때문에 인터페이스에는 구현될 단 하나의 추상메소드만 존재해야한다. - 그러기 위해서 사용하는 방식이 함수적 인터페이스. 인터페이스에 단 하나의 추상메소드만 있어야한다. - @FunctionalInterface 어노테이션은 컴파일러가 어노테이션이 있는 인터페이스의 추상메소드 개수를 세어 2개 이상인 경우 컴파일 오류를 낸다. - 그러나 어노테이션이 없다고 함수적 인터페이스가 아니라고는 하지 않는다. 단지 개발자의 실수를 방지하기 위한 체킹용 어노테이션이다. 매개변수와 리턴값이 없는 람다식 @..
수집 - 요소들을 필터링/매핑한 후 요소들을 수집하는 최종처리 메소드를 제공 - 필요한 요소만 컬렉션으로 담을 수 있고, 요소들을 그룹핑한 후 집계할 수 있음 예제를 위한 Student 클래스 public class Student implements Comparable{ public enum Sex {MALE, FEMALE} public enum City {Seoul, Pusan} private String name; private int score; private Sex sex; private City city; public Student(String name, int score) { super(); this.name = name; this.score = score; } public Student(St..
기본 집계 메소드 - 최종 처리 기능 - 요소들을 처리해서 카운팅, 합계, 평균값, 최대값, 최소값 등 하나의 값으로 산출 - 대량의 데이터를 가공해서 축소하는 리덕션. 기본 집계 메소드 예제 package Stream.middleprocess.zipgue; import java.util.Arrays; public class AggregateExample { public static void main(String[] args) { //배열선언 int[] temp = new int[] { 1,2,3,4,5 }; //카운트 long count = Arrays.stream(temp).filter(n -> n%2 ==0) .count(); System.out.println("2의 배수 개수 : "+count);..
x만큼 간격이 있는 n개의 숫자 문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 입출력 예 x n answer 2 5 [2,4,6,8,10] 4 3 [4,8,12] -4 2 [-4, -8] 나의 풀이 class Solution { public long[] solution(long x, int n) { long[] answer = new long[n]; for(int i =0; i
정렬 - 중간 단계에서 요소를 정렬해서 최종 처리 순서를 변경할 수 있음. - 객체요소일 경우 클래스가 Comparable을 구현하지 않으면 ClassCastException 발생 Comparable 인터페이스를 구현한 Student 클래스 public class Student implements Comparable{ String name; int score; public Student(String name, int score) { super(); this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public in..
필터링 - 중간처리 기능으로 요소를 걸러내는 역할 - distinct() : 중복을 제거하는 메소드 - filter() : 매개값으로 주어진 Pridicate 객체가 true를 반환하는 요소만 필터. public static void main(String[] args) { List names = Arrays.asList("가나다","라마바","가나다","차카타","파하"); //이름 중복 제외. names.stream() .distinct() .forEach(System.out::println); System.out.println(); //"가"로 시작하는 이름만 필터 names.stream() .filter(n->n.startsWith("가")) .forEach(System.out::println); ..
Stream은 BaseStream이라는 부모 인터페이스가 있고 각각의 자식인터페이스로 다음과 같이 있다. Stream : 객체요소를 처리하는 스트림 나머지 : 각각의 타입에 맞는 primitive 타입에 대한 요소를 처리 컬렉션으로부터 스트림 얻기 public class FromCollectionExample { public static void main(String[] args) { List studentList = Arrays.asList( new Student("티타늄",10), new Student("오리발",5), new Student("하하하",30), new Student("케케케",24) ); Stream stream = studentList.stream(); stream.forEach(s..
스레드풀 - 병렬작업 처리가 많아지면 스레드 개수 증가 -> 스레드 생성 및 스케쥴링을 CPU가 바빠져서 메모리 많이 사용 - 결국 성능저하. - 갑작스런 병렬 작업처리가 많아질 때 스레드풀을 이용. - 스레드를 제한된 개수만큼 정해놓고 작업큐(Queue)에 들어오는 작업들을 하나씩 스레드가 맡아서 처리. - 스레드풀 생성/사용을 위해 Executors 클래스와 ExecutorService 인터페이스를 제공. - Executors의 다양한 정적메소드로 ExecutorService의 구현객체를 만들 수 있는데 이것이 바로 스레드풀. 스레드풀 생성 Executors 클래스 - newCachedThreadPool() - newFixedThreadPool() ExecutorService executorServi..