JAVA day 14

lee·2021년 12월 16일
0

JAVA

목록 보기
14/14

learning

수업내용 링크

저장소 : GitHub Repositories leeconomy1121/java-study

스트림 (Stream)

  • 스트림
    스트림은 '데이터의 흐름'입니다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있습낟. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있습니다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다.

    스트림에 대한 내용은 크게 세 가지로 나눌 수 있습니다.

    생성하기 : 스트림 인스턴스 생성.
    가공하기 : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업
    결과 만들기 : 최종적으로 결과를 만들어 내는 작업(terminal operation)

    1.Source : 컬렉션, 자료, 데이터 등에 스트림 인스턴스 생성
    2.중간연산 : 하지않거나(O), 여러 개의 중간 연산을 할 수 있다.
    순서 : filter가 처음 순서(조건에 맞는데이터만 추출) filter(),map() 등
    3.최종연산 : forEach() : 모든 요소를 하나씩 꺼내서 연산을 실행
    count(), max(), sum(), min() 등

  • 문자열과 배열 스트림 => 리스트로 변경

App class

package string_array;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class App {

	public static void main(String[] args) {
		// 리스트 => .stream()
		// 리스트가 아닐 경우
		// 1. Stream.of(1, 2, 3) 정수형 스트림, Stream.of("하나", "둘") 문자열 스트림
		// 2. 배열일 경우 Array.stream(배열 입력)
		Stream.of("Hello", "Bottle", "Africa")
			.sorted() // 정렬 : 알파벳순
			.findFirst() // 첫 번째
			.ifPresent(x -> System.out.println(x));
		
		String[] items = {"치킨", "원숭이", "고릴라", "치약", "고라니", "치과", "고양이"};
		Stream.of(items) // 배열을 입력해서 스트림 생성
			.filter(s -> s.startsWith("치")) // filter는 참이면 남기고 거짓이면 제거한다.
			.forEach(x -> System.out.print(x + ", "));
		
		System.out.println();
		
		int[] numbers = {2, 4, 6, 8, 10};
		Arrays.stream(numbers)
		.map(n -> n * n) // 제곱
		.average()		// 평균, max(), min()
		.ifPresent(n -> System.out.print(n));
		
		System.out.println();
		
		// 배열을 리스트로
		List<String> list = Arrays.asList(items);
		list.stream()
			.filter(x -> x.startsWith("고")) // 고릴라, 고라니, 고양이
			.sorted()			// 고라니, 고릴라, 고양이 (정렬)
			.forEach(x -> System.out.print(x + ", "));
		
		System.out.println();
		
		int[] nums = {9, 4, 6, 3, 1, 2, 7};
		Arrays.stream(nums)
			.filter(n -> n > 3) // 9, 4, 6, 7
			.sorted()			// 4, 6, 7, 9
			.map(s -> s * 10)	// 40, 60, 70, 90
			.forEach(n -> System.out.println(n));

	}

}

📝결과

비트연산

  • 10진수, 2진수, 16진수 변환

App class

package numbering;

public class App {

	public static void main(String[] args) {
		/*
		 * 10진수 decimal	  0-9
		 * 2진수  binary	  0-1 (컴퓨터)
		 * 16진수 hexadecimal 0-F
		 * 
		 * 1234567890
		 * 0, 1, 10, 11, 100, 111, 1000 => 2진수
		 * A0, FB, CD, FFFF, FF00 (16진수)
		 */
		
		// 16진수 리터럴(값) 표시는 0x 2진수는 0b
		int val = 0b11111111;
		
		System.out.println("10진수 : " + val);
		System.out.println(" 2진수 : " + Integer.toBinaryString(val)); // 10진수 정수를 => 2진수 표현
		System.out.println("16진수 : " + Integer.toHexString(val));

	}

}

📝결과

  • AND, OR
    다음 그림은 비트 AND 연산자(&)의 동작을 나타냅니다.
    이처럼 비트 AND 연산자는 대응되는 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환합니다.

    다음 그림은 비트 OR 연산자(|)의 동작을 나타냅니다. 이처럼 비트 OR 연산자는 대응되는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환합니다.
  • XOR, NOT

App class

package operators;

public class XOR_NOT {

	public static void main(String[] args) {
		// 비트 XOR, NOT 연산
		int v1 = 0b01010011;
		int v2 = 0b11010110;
		
		int result1 = v1 ^ v2; // XOR(^) 비트 연산 : 같으면 0 다르면 1
		System.out.println(toBinary(v1));
		System.out.println(toBinary(v2));
		System.out.println(toBinary(result1));
		
		System.out.println();
		
		// NOT(~) 비트 연산 : 1 -> 0, 0 -> 1
		System.out.println(toBinary(~result1));

	}
	
	public static String toBinary(int value) { // 이진수 문자열로 출력!
		// String.format은 printf처럼 사용하면 문자열로 리턴된다.
		return String.format("%8s", Integer.toBinaryString(value)).replace(" ", "0");
	}

}

📝결과
NOT(~) 결과값은 뒤에서 8개의 숫자 01111010

  • 쉬프트(SHIFT)
    왼쪽 쉬프트 연산자(<<)는 지정한 수만큼 피연산자의 모든 비트를 전부 왼쪽으로 이동시킵니다.
    이때 비트의 이동으로 새로 생기는 오른쪽 비트들은 언제나 0으로 채워집니다.
    실행 결과를 살펴보면, 모든 비트가 한 비트씩 왼쪽으로 이동할 때마다 그 값은 2배씩 증가한다는 사실을 알 수 있습니다.

    오른쪽 쉬프트 연산자(>>)는 지정한 수만큼 피연산자의 모든 비트를 전부 오른쪽으로 이동시킵니다.
    실행 결과를 살펴보면, 모든 비트가 한 비트씩 오른쪽으로 이동할 때마다 그 값은 2배씩 감소한다는 사실을 알 수 있습니다.

App class

package operators;

public class SHIFT {

	public static void main(String[] args) {
		// 비트 shift >>, << 연산
		int value = 0b00010001;
		System.out.println(toBinary(value));
		int result1 = value << 3;
		System.out.println(toBinary(result1));
		int result2 = result1 >> 3;
		System.out.println(toBinary(result2));
		
		System.out.println(100 << 3); // 곱하기 값이 2^n 즉 2*  2
		System.out.println(100 >> 2); // 나누기 2 * 2
		
	}
	
	public static String toBinary(int value) { // 이진수 문자열로 출력!
		// String.format은 printf처럼 사용하면 문자열로 리턴된다.
		return String.format("%8s", Integer.toBinaryString(value)).replace(" ", "0");
	}

}

📝결과

profile
Hello, world!

0개의 댓글