728x90
람다식
매개변수로 전달하는 람다식
package test17;
//함수형 인터페이스 : 람다식을 만들기 위한 인터페이스
@FunctionalInterface
interface PrintString{
//추상 메소드
void showString(String str);
}
/*
class aa implements PrintString{
@Override
public void showString(String str) {
System.out.println("showString() 메소드 구현");
System.out.println(str);
}
}
*/
public class TestLambda1 {
//매개변수로 전달하는 람다식
// lambda 함수 인터페이스로 구현한 익명구현 객체
// 람다식(익명함수)이 들어있는 변수
public static void showMyString(PrintString p) {
p.showString("매개변수를 인터페이스형으로 받음. 메소드의 매개변수로 람다식을 대입한 변수 전달");
}
public static void main(String[] args) {
/*
//인터페이스를 구현한 클래스로 사용하는 방법(객체 기반)
aa a1 = new aa();
a1.showString("Override 시켜 구현한 메소드 호출");
System.out.println("============================");
//인터페이스 변수
PrintString ps = new aa();
ps.showString("인터페이스 변수로 Override 시켜 구현한 메소드 호출");
*/
/*
//익명 클래스, 익명 구현 객체로 사용하는 방법
PrintString ps1 = new PrintString() {
@Override
public void showString(String str) {
System.out.println("showString() 익명 메소드 구현");
System.out.println(str);
}
};
ps1.showString("익명 클래스, 익명 구현 객체를 생성");
*/
//람다식으로 사용하는 방법
//람다식을 인터페이스형 변수에 대입하고 그 변수를 사용해 람다식 구현부 호출 -> 수식 형태로 구분(익명 함수 형태)
PrintString lambdaStr = str -> System.out.println(str);
lambdaStr.showString("람다식을 인터페이스형 변수에 대입하고 그 변수를 사용해 람다식 구현부 호출");
//public static void showMyString(PrintString p) 람다식을 매개변수로 전달받은 함수 호출 확인
showMyString(lambdaStr);
}
}
반환 값으로 쓰이는 람다식
package test17;
//함수형 인터페이스 : 람다식을 만들기 위한 인터페이스
@FunctionalInterface
interface PrintString{
//추상 메소드
void showString(String str);
}
/*
class aa implements PrintString{
@Override
public void showString(String str) {
System.out.println("showString() 메소드 구현");
System.out.println(str);
}
}
*/
public class TestLambda1 {
//매개변수로 전달하는 람다식
// lambda 함수 인터페이스로 구현한 익명구현 객체
// 람다식(익명함수)이 들어있는 변수
public static void showMyString(PrintString p) {
p.showString("매개변수를 인터페이스형으로 받음. 메소드의 매개변수로 람다식을 대입한 변수 전달");
}
//람다식을 반환하는 메소드 : 반환형 PrintString
public static PrintString returnString() {
// PrintString str = s -> System.out.println(s + "returnString()");
// return str;
return s -> System.out.println(s+"returnString()"); //호출한 곳으로 돌려보낸다.
}
public static void main(String[] args) {
/*
//인터페이스를 구현한 클래스로 사용하는 방법(객체 기반)
aa a1 = new aa();
a1.showString("Override 시켜 구현한 메소드 호출");
System.out.println("============================");
//인터페이스 변수
PrintString ps = new aa();
ps.showString("인터페이스 변수로 Override 시켜 구현한 메소드 호출");
*/
/*
//익명 클래스, 익명 구현 객체로 사용하는 방법
PrintString ps1 = new PrintString() {
@Override
public void showString(String str) {
System.out.println("showString() 익명 메소드 구현");
System.out.println(str);
}
};
ps1.showString("익명 클래스, 익명 구현 객체를 생성");
*/
//람다식으로 사용하는 방법
//람다식을 인터페이스형 변수에 대입하고 그 변수를 사용해 람다식 구현부 호출 -> 수식 형태로 구분(익명 함수 형태)
PrintString lambdaStr = str -> System.out.println(str);
lambdaStr.showString("람다식을 인터페이스형 변수에 대입하고 그 변수를 사용해 람다식 구현부 호출");
//public static void showMyString(PrintString p) 람다식을 매개변수로 전달받은 함수 호출 확인
showMyString(lambdaStr);
System.out.println("============================");
//람다식 반환받기 : 람다식을 변수에 대입
PrintString reStr = returnString();
reStr.showString("PrintString ");
}
}
package test17;
//함수형 인터페이스 : 람다식을 만들기 위한 인터페이스
@FunctionalInterface
interface PrintString{
//추상 메소드
void showString(String str);
}
/*
class aa implements PrintString{
@Override
public void showString(String str) {
System.out.println("showString() 메소드 구현");
System.out.println(str);
}
}
*/
public class TestLambda1 {
//매개변수로 전달하는 람다식
// lambda 함수 인터페이스로 구현한 익명구현 객체
// 람다식(익명함수)이 들어있는 변수
public static void showMyString(PrintString p) {
p.showString("매개변수를 인터페이스형으로 받음. 메소드의 매개변수로 람다식을 대입한 변수 전달");
}
//람다식을 반환하는 메소드 : 반환형 PrintString
public static PrintString returnString() {
// PrintString str = s -> System.out.println(s + "returnString()");
// return str;
return s -> System.out.println(s+"returnString()"); //호출한 곳으로 돌려보낸다.
}
public static void main(String[] args) {
/*
//인터페이스를 구현한 클래스로 사용하는 방법(객체 기반)
aa a1 = new aa();
a1.showString("Override 시켜 구현한 메소드 호출");
System.out.println("============================");
//인터페이스 변수
PrintString ps = new aa();
ps.showString("인터페이스 변수로 Override 시켜 구현한 메소드 호출");
*/
/*
//익명 클래스, 익명 구현 객체로 사용하는 방법
PrintString ps1 = new PrintString() {
@Override
public void showString(String str) {
System.out.println("showString() 익명 메소드 구현");
System.out.println(str);
}
};
ps1.showString("익명 클래스, 익명 구현 객체를 생성");
*/
//람다식으로 사용하는 방법
//람다식을 인터페이스형 변수에 대입하고 그 변수를 사용해 람다식 구현부 호출 -> 수식 형태로 구분(익명 함수 형태)
PrintString lambdaStr = str -> System.out.println(str);
lambdaStr.showString("람다식을 인터페이스형 변수에 대입하고 그 변수를 사용해 람다식 구현부 호출");
//public static void showMyString(PrintString p) 람다식을 매개변수로 전달받은 함수 호출 확인
showMyString(lambdaStr);
System.out.println("============================");
//람다식 반환받기 : 람다식을 변수에 대입
PrintString reStr = returnString();
reStr.showString("PrintString ");
//
showMyString(lambdaStr);
showMyString(reStr);
}
}
Stream 인터페이스
- 여러 값들이 들어있는 컬렉션이나 배열 등을 for문이 아닌 함수형 인터페이스를 이용해서 반복처리할 수 있는 기능
- 람다식을 이용한 기술 중 하나로 데이터 소스를 조작 및 가공, 변환하여 원하는 값으로 반환해주는 인터페이스
- 정의된 메소드들의 매개변수에 람다와 메소드 참조가 필요함
Stream 특징
- 원본 데이터를 변경하지 않음
- 재사용이 불가능한 일회용 스트림
- 내부 반복으로 작업을 처리할 수 있는 구조를 제공
스트림 생성하고 사용
package test17;
import java.util.Arrays;
import java.util.stream.IntStream;
public class IntArrayTest {
public static void main(String[] args) {
//정수 배열에 스트림 사용
int[] arr = {1,2,3,4,5};
//합계 구하기
int total = 0;
for(int i = 0; i<=arr.length;i++) {
total += i;
}
System.out.println(total);
//또는
int total1 = 0;
for(int j : arr) {
total1 += j;
}
System.out.println(total1);
System.out.println("=====================");
IntStream intstream1 = Arrays.stream(arr);
intstream1.forEach(s -> System.out.println(s));
System.out.println("=====================");
int sumVal = Arrays.stream(arr).sum();
System.out.println(sumVal);
//count() 최종연산 메소드 long형으로 결과값을 돌려줌 -> 형 변환이 필요함
int countVal = (int) Arrays.stream(arr).count();
System.out.println(countVal);
Object avgVal = Arrays.stream(arr).average();
System.out.println(avgVal);
System.out.println("=====================");
IntStream intstream2 = IntStream.of(1,2,3,4,5);
intstream2.forEach(s -> System.out.println(s));
System.out.println("=====================");
IntStream intstream3 = IntStream.range(1,10);
intstream3.forEach(s -> System.out.println(s)); //1~9까지
System.out.println("=====================");
IntStream intstream4 = IntStream.rangeClosed(1,10);
intstream4.forEach(s -> System.out.println(s)); //1~10까지
}
}
package test17;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class ArrayListStreamTest {
public static void main(String[] args) {
//ArrayList에서 스트림 사용
List<String> sList = new ArrayList<String>();
// ==ArrayList<String> sList = new ArrayList<String>();
sList.add("HTML");
sList.add("CSS");
sList.add("JavaScript");
sList.add("Java");
for(int i = 0 ; i < sList.size();i++) {
System.out.println(sList.get(i));
}
System.out.println("======================");
Stream<String> stream = sList.stream(); //스트림 생성
stream.forEach(s->System.out.println(s + "")); //배열의 요소를 하나씩 출력
System.out.println("======================");
//스트림을 새로 생성 정렬 요소를 하나씩 꺼내어 출력
sList.stream().sorted().forEach(s->System.out.println(s + ""));
}
}
728x90
'KDT > Java' 카테고리의 다른 글
240320 Java - 스레드 2 (0) | 2024.03.20 |
---|---|
240318 Java - 스트림 3, 스레드 1 (0) | 2024.03.18 |
240313 Java - 람다식 (0) | 2024.03.13 |
240311 Java - 내부 클래스2 (0) | 2024.03.11 |
240307 Java 입출력 스트림 3, 내부 클래스 1 (0) | 2024.03.07 |