본문 바로가기

JAVA

(158)
IntStream // 1.범위 내의 정수 생성: int sum = IntStream.range(1, 10) // 1부터 9까지의 정수를 생성 .filter(e -> e % 2 == 0) .sum(); System.out.println(sum); // 1~9까지 정수 중 짝수인것들의 합... 간결하고 보기 쉽네 ㅠㅠ // 2. 배열에서 IntStream 생성: int[] numbers = {1, 2, 3, 4, 5}; IntStream intStream = Arrays.stream(numbers); intStream.forEach(System.out::println); --> Stream중 int와 관련하여 아주 최적화된 메서드
Stream_API // 스트림 API = 함수형 프로그래밍 = 가독성 향상 ## 스트림의 주요 개념: // // 1.선언적 처리(Declarative Processing): // 데이터 처리 작업을 선언적으로 정의할 수 있도록 합니다. // 즉, 무엇을 원하는지를 명시하고, 어떻게 하는지에 대한 세부적인 구현은 숨겨집니다. // // 2. 파이프라이닝(Pipelining): // 스트림 연산을 연결하여 데이터를 다양하게 처리할 수 있습니다. // 이렇게 연결된 연산들은 연속적으로 처리되며, 중간 연산과 최종 연산으로 나뉩니다. // 중간 연산(예: filter, map, flatMap)은 스트림을 반환하고, // 최종 연산(예: forEach, collect, reduce)은 스트림을 소비하고 결과를 생성합니다. // -..
Lambda5_consumer(interface) List list = new ArrayList(); list.add("안녕1"); list.add("안녕2"); list.add("안녕3"); list.add("안녕4"); list.add("안녕5"); // 원래는 내가 foreach를 만들어서 돌리겠지? // interface consumer // 1. list.forEach(이 괄호 안에 : consumer 인터페이스를 상속받은 클래스의 인스턴스를 넣으면 된다); list.forEach(new QQQ()); // --> 방법1_비추천) QQQ 클래스를 forEach에 넣어서, 그안에있는 메서드들을 순차적으로 실행시켜준다 //2. consumer라는 인터페이스가 뭔지는 모르겠지만 일단 상속받아야되니까 쓰자 // 2-1) 원래는 Consumer에서 선언..
Lambda4_메서드참조 interface BBB { public int some(int a /* int b 이런식으로 달라지면 error난다구 */ ); } // 매서드를 넣을수도있다구 BBB t1 = a -> Math.incrementExact(a);// 그냥 어떤걸넣어본거임 int result = t1.some(5); System.out.println(result); // 이렇게 써도 되겠지 --> System.out.println(t1.some(5)); // ★★★ 매서드 참조 : 아주아주 요약한.... 매개변수 자체도 없애버렸노; BBB t2 = Math::incrementExact; int result2 = t2.some(5); System.out.println(result2);
Lambda3_구현코드가 한줄일때 활용법 // 인터페이스 생성 // - > 인터페이스의 매개변수가 1개인 경우 // t1~4들이 내가 생성했어야했던 클래스들의 이름이라고 생각하니까 괜찮네 // 1. 리턴있을때 interface TTT{ public int some(int a); } // 2. 리턴없을때 interface CCC{ public void test(int a); } // 정석 TTT t1 = (a)->{ return a+3; }; int result = t1.some(5);// 1회성이니까 이제 t1은 안녕~ System.out.println(result); TTT t2 = (a)->{ return a-3; }; int result2 = t2.some(5); System.out.println(result2); ★★★ 1. 일반적 사용..
Lambda2 // 람다식(문법) // # 특징 // 1. 사용하고자하는 인터페이스에 추상메서드가 단 한개여야만 함 // 2. 구현하고자하는 내용이 최대한 적을 때 사용해야 함(필수는 아니지만..) // Testalbe2라는 인터페이스 생성, 그걸 상속받는 some2클래스 생성. interface Testable2{ public int plus(int a, int b); } class some2 implements Testable2{ public int plus(int a, int b) { return a+b; } } // 기존방법 Testable2 t1 = new some2(); System.out.println(t1.plus(4, 3)); // 람다식 (some2클래스가 없다고 가정!!) // --> return ..
(람다식하기 전) interface review // Some1 s1 = new Some1(); --> 이거 안하는거 이제는 알지...? // 추상화를 높여서 인터페이스를 끌고와. 다형성 활용하자 진짜로ㅠ퓨ㅠㅠ // **기억해** 우항에는 주소값이 들어갈 수 있으며, Testable을 상속받은 친구들의 인스턴스, 매서드를 사용한다 interface Testable{// 1. 인터페이스 생성했으면 매서드를 실행시킬 클래스들이 필요하겠지 public void test1(int a, int b); public void test2(); } class Some1 implements Testable{// 2. 상속받을거양 public void test1(int a, int b) { } public void test2() { } } // ## 익명 객체 생성(사실..
Lambda Basic // 람다식(문법) // 절차지향 -> 객체지향 -> 함수형 프로그래밍 // for문, 컬렉션, 인터페이스가 완벽해야함 (람다식을 for문, 인터페이스로 다시 바꿔쓸 수 있을 정도로..) ## 람다식(lambda expression): // 익명 함수(anonymous function)를 만들기 위한 간단하고 강력한 방법 // 보통 한 줄로 표현되며, 이름 없이 함수를 정의하고 사용할 수 있게 함 // # 기본구문 : (매개변수) -> 표현식 // (매개변수) : 람다 함수의 매개변수를 정의합니다. // -> : 람다 함수의 매개변수와 표현식을 분리하는 연산자입니다. // 표현식 : 람다 함수가 실행될 때 반환할 값을 나타냅니다. List list = new ArrayList(); list.add(8);..