Language 36

16-1. 입출력 I/O: 바이트기반 스트림

I/O란 Input과 Output의 약자로 입력과 출력을 줄여 입출력이라고 한다. 입출력은 내부 또는 외부 장치와 프로그램간의 데이터를 주고받는 것을 말한다. 스트림(Stream) 자바에서 입출력을 수행하려면 두 대상을 연결하고 데이터를 전송 할 수 있는 스트림이 필요하다. * 스트림: 데이터를 운반하는데 사용되는 연결통로 스트림은 단방향 통신만 가능함으로 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없고, 만약 입력과 출력을 동시에 수행하고자 한다면 입력 스트림과 출력 스트림이 필요하다. 스트림은 먼저 보낸 데이터를 먼저 받게 되어 있으며 중간에 건너뜀 없이 연속적으로 데이터를 주고 받는다. 바이트기반 스트림: InputStream, OutputStream 스트림은 바이트 단위로 데이터를 전송하며..

Language/Java 2021.08.08

15-4(2). 스트림의 최종 연산 - Collect

Collect(): 그룹별로 나눠서 리듀싱을 할때 사용 스트림의 요소를 수집하는 최종 연산으로 Collector를 매개변수로 하며, 가장 복잡하면서도 유용하게 횔용될 수 있다. * 매개변수가 Collector를 구현한 클래스의 객체여야한다. collect()가 스트림의 요소를 수집하려면, 어떻게 수집할 것인가에 대한 방법이 정의되어야 하는데, 이 방법을 구현한 것이 collector이다. collector는 Collector인터페이스를 구현한 것으로, 직접 구현(잘 안씀)할 수도 있고 미리 작성된 것을 사용할 수도 있다. 스트림을 컬렉션과 배열로 변환: toList(), toSet(), toMap(), toCollection(), toArray() 스트림의 모든 요소를 컬렉션에 수집하기위해 toList(..

Language/Java 2021.08.05

15-4(1). 스트림의 최종 연산

최종 연산은 스트림의 요로를 소모해서 결과를 만들어 낸다. 때문에 최종 연산 후에는 스트림이 닫히고 더이상 사용할수 없다. 최종 연산의 결과는 스트림 요소의 합과 같은 단일 값이거나, 스트림의 요소가 담긴 베열 또는 컬렉션일 수 있다. forEach() 스트림의 요소를 소모하는 최종연산. 반환 타입이 void이므로 스트림의 요소를 출력하는 용도로 많이 사용된다. 예제 IntStream.range(1,10).parallel().forEach(System.out::print)// 683295714 IntStream.range(1,10).parallel().forEachOrdered(System.out::print)// 123456789 조건 검사: allMatch(), anyMatch(), noneMath(..

Language/Java 2021.08.05

15-3. Optional

Optional 제네릭 클래스로 T타입 객체를 감싸는 래퍼클래스(Wrapper Class)이다. 그래서 Optional타입의 객체에는 모든 타입의 참조변수를 담을 수 있다. * 최종 연산의 결과를 Optional객체에 담아서 반환한다. - null을 직접 다루는 것은 위험(NullPointerExceptiom 예외가 발생할수 있음) 하기 때문에 Optional을 사용한다. - null을 직접 다룰때 nullCheck를 해줘야 하는데, 코드가 지저분해 진다. :: 간결하고 안전한 코드 작성이 가능해진다. Optional 객체 생성: of(), ofNullable() 예제 String str = "abc": Optional optVal = Optional.of(str); Optional optVal = Op..

Language/Java 2021.08.05

15-2. 스트림의 중간 연산

스트림 자르기: skip(), limit() 예제 IntStream intStream = IntStream.rangeClosed(1,10); // 1 2 3 4 5 6 7 8 9 10 요소를 가진 스트림 intStream.skip(3).limit(5).forEach(System.out::print);// 4 5 6 7 8 스트림 요소 걸러내기: filter(), distinct() 예제 IntStream intStream = IntStream.of(1,2,2,3,3,3,4,5,5,6); intStream.distinct().forEach(System.out::print);// 123456 IntStream intStream = IntStream.rangeClosed(1,10);// 12345678910 ..

Language/Java 2021.08.05

15-1. 스트림 만들기

스트림의 소스가 될 수 있는 대상은 배열, 컬렉션, 임의의 수 등 다양하다. 컬렉션 Collection의 자손인 List와 Set을 구현한 컬렉션 클래스들은 모두 이 메서드로 스트림을 생성할 수 있다. stream()은 해당 컬렉션을 소스로 하는 스트림을 반환한다. import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.stream.Stream; public class Main { public static void main(String[] args) throws IOException { List list = Arrays.asList(1,2,3,4,5); // 가변인자 Stream intStrea..

Language/Java 2021.08.04

15. 스트림(stream)

다양한 데이터 소스를 표준화된 방법으로 다루기 위한 것. 스트림을 사용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰수 있다. (코드가 간결하고 이해하기 쉬우며 재사용성도 높아진다) List list = Array.asList(1,2,3,4,5); Stream intStream = list.stream();// 컬렉션 Stream strStream = Stream.of(new String[]{"a","b","c"});// 배열 Stream evenStream = Stream.iterate(0, n->n+2);// 0,2,4,6, ... StreamrandomStream = Stream.generate(Math::random);// 람다식 IntStream intStream..

Language/Java 2021.08.04

14. java.util.function 패키지

자주 사용되는 다양한 함수형 인터페이스 제공. 주요 함수형 인터페이스 조건식의 표현에 사용되는 Predicate (반환 타입이 boolean)을 사용하여 문자열의 길이가 0인 경우에 "Empty"를 출력하는 코드 구현. import java.io.IOException; import java.util.function.Predicate; public class Main { public static void main(String[] args) throws IOException { Predicate isEmptyStr = s -> s.length() ==0; String s = ""; if(isEmptyStr.test(s)) System.out.println("Empty"); } } 매개변수가 2개인 함수형 인..

Language/Java 2021.08.04

13. 람다(Lambda)

람다식(Lambda Expression) 메서드를 하나의 식으로 표현한것. * 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 익명함수(annonymous function)라고도 한다. import java.io.IOException; import java.util.Arrays; public class Main { public static void main(String[] args) throws IOException { int[] arr = new int[5]; for(int e : arr){ System.out.print(e); } System.out.println(); // 람다식을 사용하여 배열의 각 요소에 값을 삽입 Arrays.setAll(arr, (i) -> (int..

Language/Java 2021.08.04
728x90