정렬

박진은·2023년 8월 9일
0

코테

목록 보기
41/44

https://school.programmers.co.kr/tryouts/71874/challenges

문제는 위에

import java.util.*;
import java.util.stream.*;//comparator 사용을 위해서 import
class Solution {
    public String[] solution(String[] strings, int n) {
        
        List<String> stringss = new ArrayList<>(Arrays.stream(strings).collect(Collectors.toList()));
        Collections.sort(stringss, (i,e)-> {
            char c = i.charAt(n);
            char d = e.charAt(n);
            return c-d;});//collections 객체를 정렬
        
        Collections.sort(stringss, (i,e) -> {
            if((i.charAt(n)- e.charAt(n))==0){
                return i.compareTo(e);
            }else{
                return i.charAt(n)- e.charAt(n);
            }});
        
        Collections.sort(stringss, new Comparator<String>(){
            @Override
            public int compare(String i, String e){
                if(i.charAt(n)==e.charAt(n)){
                    return i.compareTo(e);
                }else{
                    return i.charAt(n)-e.charAt(n);
                }
            }
        });
        
        Collections.sort(stringss, (i,e)->{
            if(i.charAt(n) == e.charAt(n)){
                return i.compareTo(e);
            }else{
                return i.charAt(n) - e.charAt(n);
            }
        });
        
        
        
       
        
        
        return stringss.toArray(new String[0]);
    }
}

사용된 람다 및 stream 정리

        List<String> stringss = new ArrayList<>(Arrays.stream(strings)
        .collect(Collectors.toList()));
제일 먼저 위에서 string list를 만들어 주기 위해서 사용했다.
1. Arrays.asList(strings);
- 이런 식으로 사용해서 리스트를 만들 수도 있지만 사실 이는 collections type 의 배열이 아니다 따라서 해당하는 배열은 불변 객체이며 arraylist 를 생성하는데 있어서 사용할 수 없다.
2. Arrays.stream(strings).collect(Collectors.toList());
import java.util.stream.*;//comparator 사용을 위해서 import

위의 문장에서 collectors 의 toList 를 사용해서 각 배열의 요소하나하나를 받아주기 위해서 사용한다
이를 사용하기 위해서는 반드시 위에 존재하는 import 문을 사용해서 해당 라이브러리를 임포트 해야한다.
 
        Collections.sort(stringss, (i,e) -> {
            if((i.charAt(n)- e.charAt(n))==0){
                return i.compareTo(e);
            }else{
                return i.charAt(n)- e.charAt(n);
            }});
        
        Collections.sort(stringss, new Comparator<String>(){
            @Override
            public int compare(String i, String e){
                if(i.charAt(n)==e.charAt(n)){
                    return i.compareTo(e);
                }else{
                    return i.charAt(n)-e.charAt(n);
                }
            }
        });
   
   collections 객체는 Collections.sort() 라는 static method 를 이용해서 
   구현이 가능하다. 제일 중요한 점은 이를 사용하기 위해서는 반드시 comparator 를 전달해 줘야한다.
 이는 functional interface 이기 때문에 람다식으로 전환 가능하다. 
 원본은 밑 구문처럼 직접 익명 클래스를 생성자와 함께 구현했다 여기서 제네릭을 사용해서 직접 문자열 클래스에 해당하는 명시를 해야한다.
 
 다음 방법은 람다식을 이용해서 구현하는 방법으로 제네릭을 구현할  필요도, 함수 이름을 명시할 필요도 없다 하지만 한줄 이상인 경우 그리고 리턴문이 존재하는 경우에 위와 같이 중괄호에 작성해야한다.
   
profile
코딩

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기