기본형을 사용하는 함수형인터페이스
앞서 알아본 함수형인터페이스는 매개변수와 반환값이 모두 지네릭 타입이었다.
기본형타입을 사용하게 될떄도 Wrapper 클래스를 사용하게되는데, 이 비효율적인 처리를 기본형을 사용하는 함수형 인터페이스로 해결할 수 있다.
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
Function<Integer, Integer> squareFunction = num -> {
Integer result = num * num; // Wrapper 클래스 사용
return result;
};
int number = 5;
Integer squared = squareFunction.apply(number); // Wrapper 클래스 사용
System.out.println("Squared value: " + squared);
}
}
import java.util.function.IntUnaryOperator;
public class Main {
public static void main(String[] args) {
//IntUnaryOperator는 기본형 int 값을 입력으로 받아들이고, int 값을 반환하는 함수형 인터페이스
IntUnaryOperator squareFunction = num -> num * num; // 기본형 사용
int number = 5;
int squared = squareFunction.applyAsInt(number); // 기본형 사용
System.out.println("Squared value: " + squared);
}
}
https://standout.tistory.com/1433
하나의 추상 메서드를 갖는, 함수형 인터페이스
함수형 인터페이스 자바8부터 도입된 기능, 딱 하나의 추상 메서드를 갖는 인터페이스. 예를 들어 Runnable도 run 메서드만을 가지고있어 함수형 인터페이스. Runnable myRunnable = () -> { System.out.println("R
standout.tistory.com
https://standout.tistory.com/1393
Generics 지네릭스, 형변환을 생략하다
Generics 지네릭스 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일시 타입체크를 해주는 기능 타입안정성을 제공하며 형변환을 생략할 수 있어 코드가 간결해진다. import java.util
standout.tistory.com
https://standout.tistory.com/1438
java.util.function패키지: java.lang.Runnable Supplier<T> Consumer<T> Function<T, R> Predicate<T>
java.util.function패키지 일반적으로 자주쓰이는 형식의 메서드를 함수형 인터페이스로 정의해논 패키지. https://standout.tistory.com/1433 { for (int i = 0; i < 5; i++) { System.out.println("Hello from thread: " + Thread.curr
standout.tistory.com
https://standout.tistory.com/1439
java.util.function패키지: BiConsumer<T, U> BiPredicate<T, U> BiFunction<T, U, R>
매개변수가 두개인 함수형 인터페이스는 이름앞에 Bi란 접두사가 붙는다. 이 외 두개 이상의 매개변수를 갖는 함수형인터페이스가 필요하다면 직접 만들어 써야한다. BiConsumer `accept(T t, U u)` 메
standout.tistory.com
https://standout.tistory.com/1440
java.util.function패키지: UnaryOperator<T> BinaryOperator<T>
매개변수타입과 반환타입이 모두 일치하는 함수형인터페이스로 UnaryOperator와 BinaryOperator가 있다. UnaryOperator `UnaryOperator` 인터페이스를 사용. `apply(T t)` 메서드를 구현하여 하나의 입력값을 받아
standout.tistory.com
https://standout.tistory.com/1441
java.util.function패키지: removeIf(Predicate<E> filter) replaceAll(UnaryOperator<E> operator) forEach(Consumer<? super T> ac
프레임워크를 더 유연하고 사용하기 쉽게, 새로운 기능을 적용할 수 있도록 하기위해 컬렉션 프레임워크에 다수의 디폴트 메서드가 추가되었다. 아래는 함수형 인터페이스를 사용하는 디폴트
standout.tistory.com
기본형을 사용하는 함수형 인터페이스는 여러가지가 있다.
IntUnaryOperator: int 값을 입력으로 받아서 int 값을 반환하는 함수.
LongUnaryOperator: long 값을 입력으로 받아서 long 값을 반환하는 함수.
DoubleUnaryOperator: double 값을 입력으로 받아서 double 값을 반환하는 함수.
IntConsumer: int 값을 입력으로 받아서 작업을 수행하는 함수.
LongConsumer: long 값을 입력으로 받아서 작업을 수행하는 함수.
DoubleConsumer: double 값을 입력으로 받아서 작업을 수행하는 함수.
IntSupplier: int 값을 제공하는 함수.
LongSupplier: long 값을 제공하는 함수.
DoubleSupplier: double 값을 제공하는 함수.
IntPredicate: int 값을 입력으로 받아서 불리언 값을 반환하는 함수.
LongPredicate: long 값을 입력으로 받아서 불리언 값을 반환하는 함수.
DoublePredicate: double 값을 입력으로 받아서 불리언 값을 반환하는 함수.
IntFunction<R>: int 값을 입력으로 받아서 제네릭 타입 R을 반환하는 함수.
LongFunction<R>: long 값을 입력으로 받아서 제네릭 타입 R을 반환하는 함수.
DoubleFunction<R>: double 값을 입력으로 받아서 제네릭 타입 R을 반환하는 함수.
IntToLongFunction: int 값을 입력으로 받아서 long 값을 반환하는 함수.
IntToDoubleFunction: int 값을 입력으로 받아서 double 값을 반환하는 함수.
LongToIntFunction: long 값을 입력으로 받아서 int 값을 반환하는 함수.
LongToDoubleFunction: long 값을 입력으로 받아서 double 값을 반환하는 함수.
DoubleToIntFunction: double 값을 입력으로 받아서 int 값을 반환하는 함수.
DoubleToLongFunction: double 값을 입력으로 받아서 long 값을 반환하는 함수.
ObjIntConsumer<T>: 객체와 int 값을 입력으로 받아서 작업을 수행하는 함수.
ObjLongConsumer<T>: 객체와 long 값을 입력으로 받아서 작업을 수행하는 함수.
ObjDoubleConsumer<T>: 객체와 double 값을 입력으로 받아서 작업을 수행하는 함수.
위에서 살펴본 IntUnaryOperator 제외, 추가로 몇개 더 살펴보자.
DoubleToIntFunction
`applyAsInt(double value)` 메서드를 호출하여 double 값을 입력으로 받아 int로 변환하는 함수형 인터페이스
import java.util.function.DoubleToIntFunction;
public class Main {
public static void main(String[] args) {
// DoubleToIntFunction을 이용하여 double 값을 int로 변환하는 예시
DoubleToIntFunction converter = value -> (int) value;
// DoubleToIntFunction에 double 값을 전달하여 변환
int result = converter.applyAsInt(3.5);
System.out.println("Converted value: " + result);
}
}
[출력결과]
Converted value: 3
ToIntFunction<T>
`applyAsInt(T value)` 메서드를 호출하여 제네릭 타입 T를 입력으로 받아서 해당 객체를 정수로 변환하는 함수형 인터페이스
import java.util.function.ToIntFunction;
public class Main {
public static void main(String[] args) {
// ToIntFunction을 이용하여 문자열의 길이를 반환하는 예시
ToIntFunction<String> lengthCalculator = str -> str.length();
// ToIntFunction에 문자열을 전달하여 길이를 계산
int length = lengthCalculator.applyAsInt("Hello");
System.out.println("Length of the string: " + length);
}
}
[출력결과]
Length of the string: 5
IntFunction<R>
`apply(int value)` 메서드를 호출하여 int 값을 입력으로 받아서 해당 값을 다른 형식으로 변환하는 함수형 인터페이스
import java.util.function.IntFunction;
public class Main {
public static void main(String[] args) {
// IntFunction을 이용하여 int 값을 문자열로 변환하는 예시
IntFunction<String> intToString = num -> String.valueOf(num);
// IntFunction에 int 값을 전달하여 문자열로 변환
String convertedString = intToString.apply(10);
System.out.println("Converted string: " + convertedString);
}
}
[출력결과]
Converted string: 10
ObjIntConsumer<T>
`accept(T obj, int value)` 메서드를 호출하여 제네릭 타입 T와 int 값을 입력으로 받아서 그에 맞는 작업을 수행하는 함수형 인터페이스
import java.util.function.ObjIntConsumer;
public class Main {
public static void main(String[] args) {
// ObjIntConsumer을 이용하여 문자열과 숫자를 연결하여 출력하는 예시
ObjIntConsumer<String> stringNumberPrinter = (str, num) -> System.out.println(str + num);
// ObjIntConsumer에 문자열과 숫자를 전달하여 출력
stringNumberPrinter.accept("The number is ", 10);
}
}
[출력결과]
The number is 10