본문 바로가기
CLASS/JAVA

#20-3 / collector interface, Comparable

by hingu 2024. 6. 11.
Collector

Collector : generic을 사용하는 유일한 interface
❗ 기본제공 라이브러리

어렵당... 몰라두댐.. 나중에혹시 쓰게된다면..참고... 추후에 공부..

stringbuilder가 뭐였더라...    https://dev-eunse.tistory.com/75

Stream 사용하면 lamda방식이구나 하면됨

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();
	}
}

 

 

⚡ Comparable
먼말인지 모르겟당.. 나중에 공부할것..

Comparable : Stream을 사용시 적용하는 interface

Comparable의 주목적
여러개의 data값을 내림차순,오름차순으로 정렬하는 interface 역할
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;
	};	
}

 

'CLASS > JAVA' 카테고리의 다른 글

#20-2 / generic code 형태의 class  (1) 2024.06.11
#20-1 / 람다(lamda)코드 사용 방식  (1) 2024.06.11
#19 / Thread (class 형태 , interface 형태)  (0) 2024.05.31
#18-2 / Thread를 이용한 멀티 서버  (0) 2024.05.27
#18-1 / 서버 - UDP  (0) 2024.05.27