1. parameter (param1, param2) : 매개변수 지정, 매개변수는 없을 수도 있다
2. lamdba operator -> : 람다 본문에서 매개변수 리스트를 분리, 함수 시그니처와 본문 사이의 다리 역할
3. body{...} : 람다식이 실행될 부분
-> (parameters,...) -> {body}
@FunctionalInterface
interface MathOperation {
int calculate(int a, int b);
}
public class ex2 {
public static void main(String[] args) {
MathOperation addition = (a, b) -> a + b; //=Integer::sum
int result = addition.calculate(3, 4);
System.out.println(result);
}
}
//lambda expression
Function<Integer, String> lambda = (x)->String.valueOf(x);
//Method expression
Function<Integer, String> reference = String::valueOf;
//lambda expression : 람다를 정의
Function<Integer, String> lambda = (str)->String.length(x);
//Method expression : 람다식을 호출할 때
Function<Integer, String> reference = String::length;
//lambda expression
BiFunction<String, String, Boolean> lambda = (str1, str2)->str1.equals(str2);
//Method expression
BiFunction<String, String, Boolean> reference = String::equals;
//lambda expression
Supplier<List<String>> lambda = ()-> newArrayList<>();
//Method expression
Supplier<List<String>> reference = ArrayList::new;
Supplier<ClassName> constructorRef = ClassName::new;
Function<Integer, ClassName> constructorRef = ClassName::new;
Function<Integer, ClassName[]> constructorRef = ClassName::new;
Supplier<GenericClass<Integer>> constructorRef = GenericClass<Integer>::new;
Calculator calculator = new Calculator();
Calculator calculator = CalculatorImpl::new;
//미리 정의된 값으로 컬렉션을 초기화
List<Integer> numbers = Stream.of(1,2,3).collect(Collectors.toCollection(ArrayList::new));
Function<String, Integer, Person> personFunction = Person::new;
//인수가 없는 Random 생성자를 사용하여 새 Random 객체를 생성하는 람다식 작성
Supplier<Random> newRandom = Random::new;
Random random = newRandom.get();
System.out.println(random.nextInt(100));
내부 반복자이므로 처리속도가 빠르고 병렬 처리에 효율적파이프 라인을 형성컬렉션 내부로 주입시켜 요소를 반복 처리//정수형 배열 생성 및 초기화
int[] array = {1, 2, 3, 4, 5};
//정수형 배열을 스트림 객체 stm1에 담아주기
IntStream stm1 = Arrays.stream(array);
Stream<Integer> stm3 = Arrays.stream(array).boxed();
//stm1에서 홀수만 뽑아(중간 연산) stm2에 담아주기
IntStream stm2 = stm1.filter(n -> n % 2 != 0);
Stream<Integer> stm4 = stm3.filter(n -> n % 2 != 0);
//stm2의 총합(최종 연산) 구하기
int result = stm2.sum();
int total = stm4.collect(Collectors.summingInt(Integer::intValue));
//int total = stm4.mapToInt(Integer::intValue).sum();
//정수형 배열 생성 및 초기화
int[] array = {1, 2, 3, 4, 5};
//파이프 라인 구성
int sum = Arrays.stream(array).filter(n -> n % 2 == 1).sum();
//Comparable을 구현하였을 때 정렬 하는 방법
System.out.println("국어 점수 오름차순");
stuList.stream().sorted().forEach(System.out::println);
System.out.println("국어 점수 내림차순 : reverseOrder");
stuList.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println);
System.out.println("국어 점수 내림차순1 : compareTo");
stuList.stream().sorted((o1, o2) -> o2.compareTo(o1)).forEach(System.out::println);
//Comparable이 구현되지 않았을 때 정렬 하는 방법
System.out.println("국어 점수 오름차순 : Integer.compare");
stuList.stream().sorted((o1, o2) -> Integer.compare(o1.getKorScore(), o2.getKorScore()))
//.sorted(Comparator.comparingInt(Student::getKorScore))
.forEach(stu -> System.out.println(stu.getName() + " " + stu.getKorScore()));
System.out.println("국어 점수 내림차순 : Integer.compare");
stuList.stream().sorted((s1, s2) -> Integer.compare(s2.getKorScore(), s1.getKorScore()))
.forEach(stu -> System.out.println(stu.getName() + " " + stu.getKorScore()));
운영과 (리소스-하드웨어, 소프트웨어)관리를 위한 소프트웨어실행 중인 프로그램(=OS로 부터 자원을 할당 받음)프로그램 단위의 멀티 태스킹작업두 가지 이상의 작업을 동시에 처리하는 것코드의 실행 흐름, 프로세스의 내부에 존재, JVM이 운영Thread 클래스 :
1-1. java.lang.Thread 클래스로부터 작업 스레드 객체를 직접 생성
Thread thread = new Thread(Runnable target);
Runnable 스레드가 작업을 실행할 때 사용하는 인터페이스
구현 클래스는 run()을 재정의(overring)하여 스레드가 실행할 코드를 작성
1-2. java.lang.Thread 클래스를 상속받아 생성
Runnable interface : run()
public class ThreadEx1 {
public static void main(String[] args) {
//1. 상속으로 Thread 생성
ThreadByInheritance t1 = new ThreadByInheritance();
//2. Runnable 인터페이스를 통해서 Thread 생성 -> 1.보다 더 많이 사용 -> 상속에 있어 impl 이 유리하기 때문
Thread t2 = new Thread(new ThreadByImplement());
t1.start();
// t1.start(); //->IllegalThreadStateException
t2.start();
}
}
class ThreadByInheritance extends Thread {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.print(0);
}
}
}
class ThreadByImplement implements Runnable {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.print(1);
}
}
}