자바8 7

자바 기본서를 다시 읽다. 9 - 스트림의 최종처리 메소드

스트림의 최종 처리 메소드에 대해서 알아보자. 매칭(allMatch(), anyMatch(), noneMatch()) 매칭 메소드는 최종처리시 요소들이 특정 조건에 만족하는지 Predicate 를 사용하여 조사한다. 어려울것이 없다. public static void main (String[] args){ int[] intArr = new int[]{1,3, 5}; boolean isAllEvenNum = Arrays.stream(intArr).allMatch(a->a%2==0); boolean isThereEvenNum = Arrays.stream(intArr).anyMatch(a->a%2==0); boolean isAllOddNum = Arrays.stream(intArr).noneMatch(a->a..

Study/Java 2022.04.06

자바 기본서를 다시 읽다. 8 - 스트림의 중간처리 메소드

스트림은 기본적으로 중간처리 메소드와 최종처리 메소드로 이루어진 파이프라인으로 활용할 수 있다고 이전에 알아보았다. 그렇다면 중간처리와 최종 처리시 각각 활용할 수 있는 메소드들에 어떤 것들이 있는지 알아보자. 스트림의 중간처리 메소드 distinct(), filtering() 첫번째로, 중복 데이터를 걸러내는 distinct(), 특정 기준으로 데이터를 걸러주는 filtering()에 대해 알아보자. List list = Arrays.asList("윤가영","김나영","윤다영","김라영","윤마영","윤가영"); list.stream() .distinct() // 중복제거 .filter(n-> n.contains("윤")) // 조건 .forEach(s-> System.out.println("name ..

Study/Java 2022.04.06

자바 기본서를 다시 읽다. 7 - 스트림의 개념과 파이프라인

스트림의 개념과 특징 스트림(Stream)이란, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자를 말한다. // Iterator 와 Stream(람다식 사용)의 비교 public class IterationStreamExample { public static void main (String[] args){ List strings = Arrays.asList("홍길동","신용권","김자바"); Iterator iterator = strings.iterator(); while(iterator.hasNext()){ String name = iterator.next(); System.out.println("name is : " + name); } Stream stream = st..

Study/Java 2022.04.05

자바 기본서를 다시 읽다. 5 - 함수적 인터페이스의 Default Method

4강에서 알아보았던 함수적 인터페이스들은 andThen()과 compose()라는 디폴트 메소드를 가지고 있다. 이 디폴트 메소드들은 첫번째 메소드의 처리결과를 두번째 메소드의 매개값으로 넘겨주지만, 인터페이스AB = 인터페이스A.andThen(인터페이스B); or 인터페이스AB = 인터페이스B.andThen(인터페이스A); 최종결과 = 인터페이스AB.method(); 위와같이 인터페이스 AB 의 method()를 호출하기 위해 매개값으로 인터페이스 A와 B의 연산값을 넘겨준다면 andThen은 인터페이스A 호출 -> 인터페이스B 호출 compose는 인터페이스B 호출 -> 인터페이스A 호출을 먼저 한다. Consumer와 Function API를 사용한 코드를 통해 알아보자. import java.ut..

Study/Java 2022.03.27

자바 기본서를 다시 읽다. 4 - 표준 API의 함수적 인터페이스

자바 8에서부터는 빈번하게 사용되는 함수적 인터페이스(Functional Interface)는 java.util.function 표준 API 패키지로 제공한다. 이 패키지에서 제공하는 함수적 인터페이스의 목적은 메소드 또는 생성자의 매개 타입으로 사용되어 람다식을 대입할 수 있게 함이다. 함수적 인터페이스는 크게 Consumer, Supplier, Function , Operator, Predicate로 나뉘는데 각각의 특징은 아래와 같다. Consumer : 매개값 O , 리턴값 X Supplier : 매개값 X, 리턴값 O Function : 매개값 -> 리턴값으로 타입 변환 Operator : 매개값 -> 리턴값으로 값 연산 Predicate : 매개값 -> true/false 리턴 Consumer..

Study/Java 2022.03.16

자바 기본서를 다시 읽다. 3 - 로컬클래스와 익명객체, 그리고 람다식 (2)

이제 람다식을 정리해보자. 앞서 로컬클래스와 이름 없이 사용하는 로컬클래스인 익명 객체에 대해 알아보았다. 그리고 이 람다식은 런타임시 익명객체를 생성해주는 함수 생성 식이다. 이를 사용하면 자바 코드가 매우 간결해주고 컬렉션의 요소를 필터링하거나 매핑해서 원하는 결과를 쉽게 집계할 수 있다. 람다식은 아래와 같이 인터페이스 변수 = 람다식의 형태로 작성된다. Runnable runnable = () -> {}; 이렇게 보면 자바의 메소드를 선언하는 것 처럼 보이지만, 자바는 메소드만을 단독으로 생성할 수 없고, 항상 클래스의 구성 멤버로 선언하기 때문에 자바는 이 메소드를 가지는 객체를 생성하고 인터페이스 변수에 대입된다. 위 코드는 Runnable 변수에 대입되므로 람다식은 Runnable 익명 구현..

Study/Java 2022.03.15

자바 기본서를 다시 읽다. 3 - 로컬클래스와 익명객체, 그리고 람다식 (1)

람다식을 공부하다보니, 로컬클래스와 익명개체 그리고 람다식의 관계가 보였다. 람다식을 더 정확하게 사용하기 위해 로컬클래스와 익명개체부터 정리해보려고 한다. I. 로컬클래스 첫번째로, 로컬클래스는 중첩 클래스 중 하나로 하나의 클래스, especially 메소드 내부에서 선언되어 메소드가 실행 될 때에만 사용되는 클래스이다. 로컬클래스와 반대로 멤버클래스는 하나의 클래스 안에서 멤버변수로 선언되어 객체가 사용중에 언제든 재사용이 가능한 객체이다. 로컬클래스는 메소드 내부에서만 사용되므로 접근을 제한할 필요가 없어 public, private 등의 접근 제한자가 사용이 불가능하다. 또한 static 필드와 메소드도 선언할 수 없다. 로컬클래스의 가장 중요한 특징은 다음과 같다. 로컬 클래스 내부에서 바깥 ..

Study/Java 2022.03.15