본문 바로가기

TIL

22.12.27 TIL

오늘 한 일

  • 최단 경로 알고리즘, 트루스칼 알고리즘 듣기
  • 프로그래머스 알고리즘 1단계 2문제 풀기
  • 자율 학습(람다식과 스트림(Stream) 공부)

공부하면서 궁금한 점

알고리즘을 풀고나서 다른 사람들의 풀이를 참고하며 느끼던 것이 있는데,

내가 몇줄에 걸쳐 만든 코드를 한줄만에 완성시키는 코드들이 있다는 것이다.

 

수업때도 듣긴 했지만 직접 사용하는 것을 보니 더욱 흥미가 갔다.

바로 람다식과 stream이다.

 

람다식

람다식이란 메소드를 하나의 식으로 표현한 것이다.

(매개변수) -> {실행문}

위와 같이 사용 하며 매개변수의 이름은 자유롭게 정할수 있다.

함수형 인터페이스와 연결지어 사용한다

 

함수형 인터페이스란

1개의 추상 메소드를 갖고 있는 인터페이스를 말한다.

 

스트림

스트림이란 배열이나 컬렉션의 요소(List, Map, Set)들을 더 편리하게 처리하게 해주는 반복자이다.

정렬, 중복제거 등 여러 메소드 들이 있다.

 

주요메소드

.count() 배열이나 컬렉션의 크기 리턴
.sorted()  /  .sorted(Comparator.reverseOrder()) 정렬 / 역정렬
.distince() 중복 삭제
.max(Type :: compare)  /  .min(Type :: compare)  최대, 최소 값
.average()  /  .sum() 평균 / 합계
.map((파라미터) -> 코드) 스트림 원소를 변환
.forEach((파라미터) -> {코드}) 각 인덱스의 값을 파라미터로 넘겨 코드를 반복 수행
filter(파라미터) -> {코드}) 조건에 부합하지 않는 값을 걸러낸다.
.reduce(값, 데이터타입::sum) 스트림의 값을 모두 하나로 합칠 때 사용
.collect(Collectors.toList()) / toList() -> toSet(), toMap()
스트림을 List(Set, Map) 타입으로 반환 
.getAsType() / Int, Long, Double, Float... 최종 값을 지정한 타입의 형태로 반환

참고) https://lasbe.tistory.com/74

 

[Java/자바] 스트림(Stream) 사용법

스트림(Stream) 스트림은 java8부터 추가된 배열이나 컬렉션의 요소(List, Map, Set)들을 더 편리하게 가공하고 처리하도록 해주는 반복자입니다. 람다식 사용과 연산 과정에서 불필요한 변수를 남기지

lasbe.tistory.com

 

내가 풀어본 문제로 예를 들자면

나누어 떨어지는 숫자를 봔환 시키는 문제인데

class Solution {
    public int[] solution(int[] arr, int divisor) {
        ArrayList<Integer> arrList = new ArrayList<>();

        for(int i = 0; i < arr.length; i++){
            if(arr[i]%divisor == 0){
                arrList.add(arr[i]);
            }
        }

        if(arrList.size() == 0){
            arrList.add(-1);
        }

        arrList.sort(Comparator.naturalOrder());

        return arrList.stream().mapToInt(i->i).toArray();
    }
}

마지막에 stream 을 사용하여 int배열로 바꾸어 주긴 했지만

이렇게 긴 것을 

int[] answer = Arrays.stream(arr).filter(factor -> factor % divisor == 0).toArray();
          if(answer.length == 0) answer = new int[] {-1};
          java.util.Arrays.sort(answer);
          return answer;
  }

이렇게 깔끔하게 바꾸어 줄 수 있다.

 

앞으로는 람다식과 stream을 이용해 문제를 풀어 봐야겠다.


 내일 할 일

  • 프림 알고리즘 듣기
  • 프로그래머스 알고리즘 1단계 2문제 풀기
  • 자바 관련 공부

'TIL' 카테고리의 다른 글

22.12.30 TIL  (0) 2022.12.30
22.12.29 TIL  (0) 2022.12.30
22.12.26 TIL  (0) 2022.12.27
22.12.23 TIL  (0) 2022.12.23
22.12.22 TIL  (0) 2022.12.22