The document discusses Java 8 Stream API, which provides a new way to process collections of objects. It introduces key concepts of streams such as intermediate and terminal operations, and examples of using streams to filter, map, sort and collect data. Common intermediate operations include filter, sorted, map, and terminal operations include collect, reduce, count. Streams can make processing collections more declarative, optimize parallel operations, and abstract away iterations.
스트림 API는 람다 표현식을 적극적으로 활용해서 만들어진 자바의 새로운 API 입니다.
스트림 API를 통해서 자바에서도 맵/리듀스 방식으로 대량의 데이터를 순차 또는 병렬 처리를 할 수 있게 되었는데요, 이번 발표를 통해 스트림 API가 무엇인지- 어떻게 써먹는지에 대해 가볍게 씹고 뜯고 맛보고 즐기셨으면 좋겠습니다. :)
예제코드 : https://github.com/arawn/jdk8-stream-api
4. 인터페이스 중복 순서 구조 클래스 동기화 속도 정렬
NULL
허용
Set X X value
HashSet X 빠름 X
TreeSet X 느림 O
EnumSet
LiknedHashSet
List O O
index,
value
ArrayList X 매우빠름 X O
LinkedList X 느림
Vector O 느림
Stack O 느림
Map X X
key,
value
HashMap X 매우빠름 X O
Hashtable O 느림 X X
TreeMap X 매우느림 O
EnumMap
LinkedHashMap 매우빠름
WeakHashMap
4
5. 자료구조 클래스 메소드
공통 size();
list
ArrayList
LinkedList
Vector
set(v);
get(i);
stack LinkedList
addLast(v);
getLast(); removeLast();
queue LinkedList
offer(v);
pool(); peek();
hash table
Hashtable
HashMap
put(k,v);
get(k);
set HashSet
add(v);
remove(v);
5
6. 6
설명 예제
선언 임의의 타입 E를 사용할 것을 선언.
class Generic<E, F>{
void <E> add(E e){} }
사용 임의의 타입을 String으로 사용
Generic<String, Integer> list = new Generic<String>();
list.add(new String(""));
선언
Number나 그 하위 클래스 타입 E
를 사용할 것을 선언
class Generic2<E extends Number & Comparable>{
void <E> add(E e){} }
사용
Number나 그 하위 클래스 타입이
아닌 경우는 사용 불가.
Generic2<Number> list = new Generic<Number>();
Generic2<Long> list = new Generic<Long>();
Generic2<String> list = new Generic<String>();
Generic Programming
매개변수의 데이터 타입을 지정
Generic 변수명 명명규칙
E=Element, K=Key, V=Value, O:Object, T=Type
타입의 범위 지정
<E extends Class, ... & extends Interface, ....>
특정 클래스나 인터페이스 하위의 타입만 사용
7. Generic Wildcard
제너릭 타입에 대한 범위 지정
7
예제 설명
Vector<Integer> x= new Vector<String> (); 다른 타입이므로 타입변환 불가
Vector<Object> obj = new Vector<String>(); 부모클래스가 아니므로 타입변환불가
Vector<?> wild= new Vector<String>(); <?>는 <String> 의 부모타입
Vector<? extends Number> wild= new Vector<Long>(); <Long>은 <Number>의 하위 타입
Vector<? extends Number> wild= new Vector<Object>(); <Object>은 <Number>의 상위 타입
Vector<? super Number> wild= new Vector<Object>(); <Object>은 <Number>의 상위 타입
Vector<? super Number> wild= new Vector<Long>(); <Long>은 <Number>의 하위 타입
Vector raw = new Vector<String>; 암묵적 허용(?)
표시방법 설명
? 모든 타입
? extends 클래스
? extends 인터페이스
특정 클래스(인터페이스) 하위의 모든 타입 (특정 클래스 포함)
? super 클래스
? super 인터페이스
특정 클래스(인터페이스) 상위의 모든 타입 (특정 클래스 포함)