스트림 스트림(Stream)이란 데이터의 흐름을 가리킨다. 컬렉션 인스턴스나 배열에 저장된 데이터들을 꺼내서하는 일련의 작업들을 조금 더 쉽게 하기 위해 스트림을 사용한다. 스트림은 원본 데이터를 변경하지 않는다. 동작 흐름 스트림은 크게 세단계에 걸쳐서 동작한다. 스트림의 생성 스트림의 중간 연산 스트림의 최종 연산 스트림을 생성하고 이를 대상으로 중간 연산을 진행하면, 원하는 기준으로 데이터를 필터링하고 필터링 된 데이터의 결과를 얻을 수 있다. 스트림의 생성은 저장소에 저장된 데이터를 뽑아 파이프에 흘려보내기 좋은 구조로 나열한 인스턴스의 생성을 의미한다. 데이터를 흘려보내는 파이프는 연산을 의미하며, 메소드(파이프)의 종류는 두가지로 나뉜다. 중간 연산 : 마지막이 아닌 위치에서 진행이 되어야하는..
전체 글
문제 https://programmers.co.kr/learn/courses/30/lessons/64061 풀이 import java.util.ArrayDeque; import java.util.Deque; class Algorithm220209 { public static int solution(int[][] board, int[] moves) { // 게임 화면 확인 for (int[] ar : board) { for (int n : ar) { System.out.print(n + " "); } System.out.println(); } // 바구니 Deque basket = new ArrayDeque(); basket.addLast(0); // 첫번째 값 임의로 저장 // 크레인 작동 int cnt..
Optional 클래스 Optional클래스는 T타입의 객체를 포장해주는 일종의 래퍼 클래스이다. Optional 클래스는 if~else 구문을 대신할 수 있다. 조건에 따른 코드의 흐름이 나눠지는 것을 막을 수 있어 코드를 더 깔끔하게 구성할 수 있다. Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 단순하게 처리할 수 있다. 즉, 복잡한 조건문 없이도 null값으로 인해 발생하는 예외를 처리할 수 있게 된다. 💡 NullpointerException 예외 처리 클래스를 정의할 때 인스턴스 변수는 null이 되지 않게 유효한 값을 가지고 있도록 초기화 해주는 것이 좋지만, null을 허용해야 하는 경우도 있다. 이때 null 가능성에 대비하는 코드의 작성은 번거..
문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PobmqAPoDFAUq SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 풀이 import java.util.Scanner; class Algorithm220207 { public static void snail(int n) { int[][] arr = new int[n][n]; int[] dr = { 0, 1, 0, -1 }; // 행 변화값 (우 하 좌 상) int[] dc = { 1, 0, -1, 0 }; // 열 변화값 (우 하 좌 상) int[] dd = ..
메소드 참조 메소드 참조는 람다식으로 줄어든 코드의 양을 조금 더 줄일 수 있게 한다. 따라서 메소드 참조가 유용한 상황에서는 람다식이 아닌 메소드 참조를 사용해 해결 할 수 있다. 메소드 참조의 유형은 다음과 같이 4가지로 정리할 수 있다. static 메소드 참조 참조변수를 통한 인스턴스 메소드 참조 클래스 이름을 통한 인스턴스 메소드 참조 생성자 참조 static 메소드 참조 자바 8부터 이미 정의되어 있는 메소드를 사용할 때 람다식을 작성할 필요 없이 메소드 정보만 전달할 수 있다. 대입연산자 오른편에 메소드에 대한 정보만 전달되면 전달된 인자를 그대로 넘겨주면서 해당 메소드를 호출하라는 의미이다. 클래스 이름 :: static 메소드 이름 Consumer c = l -> Collections.r..
자바에서 표준으로 정의하고 있는 함수형 인터페이스들에 대해 알아보자. 기본 함수형 인터페이스 함수형 인터페이스 추상 메소드 설명 Predicate boolean test(T t) 전달 인자를 근거로 참/거짓 반환 Supplier T get() 메소드 호출시 무언가를 반환 Consumer void accept(T t) 인자를 받아들이기만 함 Funtion R apply(T t) 입력/출력이 있음 (수학적으론 함수) * java.util.funtion 패키지에 정의되어 있음 Predicate 전달된 인자를 판단하여 true 또는 false를 반환해야 하는 상황에 사용할 수 있다. @FuntionalInterface public interface Predicate { boolean test(T t); } 더보..
문제 https://programmers.co.kr/learn/courses/30/lessons/12947?language=java 코딩테스트 연습 - 하샤드 수 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하 programmers.co.kr 풀이 import java.util.Scanner; class Algorithm220129__2 { /* 풀이 */ public static boolean solution(int x) { // 각 자릿수 더하기 String s = String.valueOf(x); String[] arr = s.split(..
문제 https://programmers.co.kr/learn/courses/30/lessons/68644?language=java 코딩테스트 연습 - 두 개 뽑아서 더하기 정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요. 제한 programmers.co.kr 풀이 import java.util.Arrays; import java.util.HashSet; import java.util.Set; class Algorithm220129__1 { /* 풀이 */ public static int[] solution(int[] numbers) { S..