
람다식 -> 매개변수를 갖고 있는 코드 블록 -> 익명 구현 객체의 과정람다식 추상메소드 사용시, @FunctionalInterface annotation 표시 해야함.
매개 타입은 런타임시에 대입값 따라 자동 인식함.(생략 가능)
하나의 매개변수만 있을 경우에는 ( ) 생략 가능
하나의 실행문만 있다면 { } 생략 가능
매개변수 없다면 ( ) 생략 불가
// lambda 방법1
fi = () -> {
String str = "method call";
System.out.println(str);
};
fi.method();
// lambda 방법2
fi = () -> {System.out.println("method call2");};
fi.method();
// lambda 방법3
fi = () -> System.out.println();
fi.method();```{ }에 return 문만 있을 경우, { } 생략 가능
// lambda 방법1
fi = (x) -> {
int result = x*5;
System.out.println(result);
};
fi.method(5);
// lambda 방법2
fi = (x) -> {System.out.println(x*5);};
fi.method(5);
// lambda 방법3
//추상메소드의 파라메터 갯수가 1개이면 ()괄호 제거 가능함.
fi = x -> System.out.println(x*5);
fi.method(5);```추상메소드의 body가 return 키워드를 포함하면, return 키워드와 { }를 제거 가능함.
//main
MyFuntionalInterface fi;
//
fi = (x,y) -> {
int result = x+y;
return result;
};
System.out.println(fi.method(5, 2));
//
fi = (x,y) -> {return x+y;};
System.out.println(fi.method(5, 2));
//
fi = (x,y) -> x+y;
System.out.println(fi.method(5, 2));
//
fi = (x,y) -> sum(x,y);
System.out.println(fi.method(5, 2));
//sum
public static int sum(int x, int y) {return (x+y);}배열(array)은 대량의 데이터를 변수로 선언하는 프로그래밍 방식임.
배열(array)의 단점은,
추가 삭제 조회 수정하는데 시간이 많이 소요됨.컬렉션 프레임워크(collection framework)는 java.util pkg(패키지)에 포함됨.
인터페이스를 사용하여 정형화된 방법으로 다양한 컬렉션 클래스를 사용할 수 있음
컬렉션이란?
사전적 의미로는 객체를 수집하여 저장하는 것을 의미함.
framework는 라이브러리;고도의 여러가지 기능이 있는 라이브러리
spring famework(jsp library)
컬렉션 프레임워크에는 주요 인터페이스 List Set Map이 있음
List에는 ArrayList Vector LinkedList 클래스가 있음
Set에는 HashSet TreeSet 클래스가 있음
Map은 컬렉션 인터페이스에 포함되지 않음. HashMap Hashtable TreeMap Properties 클래스가 있음


List의 구현 클래스는 ArrayList Vector LinkedList
원소를 추가할 때, 기본적으로 맨 마지막 원소 다음에 추가함.
원소를 삭제하면, 해당 원소의 자리에 다음자리의 원소가 앞으로 당겨짐.(중간에 비어있는 자리가 없음.)
List 컬렉션의 주요 메소드 정리

// 스케너로 name에 이름들을 입력 받는 코드
// 이름 배열 출력
Iterator<String> it = a.iterator();
while (it.hasNext()) {
String name = it.next();
System.out.println("Iterator 사용 이름 : " + name);
}
max() 최대값, min() 최소값binarySearch() 원하는 원소의 찾아, 해당 원소의 index 리턴함.sort() 오름차순, reverse() 리스트 순서 역행disjoint() 두개의 리스트를 비교해 중복되지 않으면 true, 중복되면 falseInteger[] numbers = { 1123, 1412, 23, 44, 512132 };
List<Integer> list = Arrays.asList(numbers);
System.out.println("Collections.max(list) : " + Collections.max(list));
System.out.println("Collections.min(list) : " + Collections.min(list));
System.out.println("Collections.binarySearch(list) : " + Collections.binarySearch(list, 44));
Collections.sort(list); // 오름차순
System.out.println("오름차순 : "+list);
Collections.reverse(list); // 리스트 역행
System.out.println("리스트 역행 : "+list);
Integer[] numbers1 = { 1123, 1412, 23, 44, 512132 };
List<Integer> list1 = Arrays.asList(numbers1);
Integer[] numbers2 = { 123, 142, 3, 4, 5132 };
List<Integer> list2 = Arrays.asList(numbers2);
// 두 리스트의 중복확인
System.out.println(Collections.disjoint(list, list1)); // 중복 있음, false
System.out.println(Collections.disjoint(list1, list2)); // 중복 없음, true
Vector는 스레드 동기화가 특징임Vector에 접근해 객제를 추가, 삭제하더라도 스레드는 안전함.Vector<E> : E는 Element의 데이터 타입을 의미함.// int[] v와 같은 표현
Vector<Integer> v = new Vector<Integer>();
v.add(5); // 마지막 원소 다음에 집어 넣음.
v.add(4);
v.add(-1);
for (int i = 0; i < v.size(); i++) {
int n = v.get(i); // v.get(i) == v[i]
System.out.println(n);
}