public class interface_etc {
public static void main(String[] args) {
String data[] = {"aaa","bbb","ccc"}; //원시배열
Stream<String> st = Stream.of(data); //원시배열을 바로 핸들링하기 위해 stream선언함
//Stream : lamda 형태 구조로 구성하기 위해 사용
//(Stream 사용하면 lamda방식이구나 하면됨)
//Stream.of : 배열값을 각각 분리하여 전달
//외부class 호출 및 interface에 있는 값을 리턴 결과 받기
inter it = new inter();
//배열 갯수만큼 it가 실행됨
String result = st.collect(it); //collect : 자료형 형태의 generic
//System.out.println(Arrays.toString(data)); //임시로 원시배열 출력
System.out.println(result); //aaabbbccc 출력
}
}
//다 안써도 됨 필요한것만 쓰면됨
//<> : <자료형,배열형태,return시 사용되는 자료형>
//StringBuilder대신 ArrayList 이런거 써도 됨
class inter implements Collector<String, StringBuilder, String>{
@Override//1번작동 : 자료형 변환(String->StringBuilder로)
//Characteristics : method 연산을 구현하는 method (다중 스레드)
public Set<Characteristics> characteristics() {
return Collections.emptySet();
}
@Override //2 : 새로운 문자열을 생성
public Supplier<StringBuilder> supplier() {
return ()-> new StringBuilder();
}
@Override //3 : append를 이용하여 배열에 값을 삽입
//public Function<StringBuilder, String> finisher() 얘랑 거의 같음
public BiConsumer<StringBuilder, String> accumulator() {
return (a,b) -> a.append(b);
}
@Override //4 : 각각의 문자를 문자열로 생성
//문자열 배열 method
public BinaryOperator<StringBuilder> combiner() {
return (a,b) -> new StringBuilder();
}
@Override //5 : 최종 문자열값을 return하는 역할
//문자열 배열 및 문자 method
public Function<StringBuilder, String> finisher() {
return a -> a.toString();
}
}
public class stream1 {
public static void main(String[] args) {
//Stream을 이용하여 해당 class를 각각 호출해 인자값을 전달 (of : 각각전달시 사용)
Stream<mb> sm = Stream.of(
new mb("홍길동",1000),
new mb("이순신",2000),
new mb("강감찬",1500)
);
String result = sm.toString(); //해당 값을 문자로 return 받음
System.out.println(result);
//java.util.stream.ReferencePipeline$Head@16f65612 출력 (..?)
}
}
class mb implements Comparable<mb> {
String name;
int point;
public mb(String user,int p) { //데이터를 받는 즉시실행 메소드
this.name = user;
this.point = p;
}
public String toString() { //진짜 그 toString-걍 이름지은게 아님
//toString : 배열을 문자로 변경
String msg = this.name + "님-[" + this.point +" ]원";
return msg;
}
//연산처리를 해 값을 return하는 method
public int compareTo(mb o) { //최종 결과를 return
return 0;
};
}