스트림/람다식 사용하여 가장 긴 문자열 추출하기
- Coding/Java
- 2021. 10. 18.
반응형
728x90
반응형
Todo. 가장 긴 문자열 추출하기
- 1. Stream 사용
public class ReduceTest {
public static void main(String[] args) {
String values[] = {"Hello", "World", "!"};
/* 가장 긴 length 문자열 추출 */
String reduce = Arrays.stream(values).reduce("", (s1, s2) -> {
if (s1.getBytes().length >= s2.getBytes().length) {
return s1;
} else {
return s2;
}
});
}
}
- 2. Lamda 사용
class CompareString implements BinaryOperator<String> {
@Override
public String apply(String s1, String s2) {
if (s1.getBytes().length >= s2.getBytes().length) {
return s1;
} else {
return s2;
}
}
}
호출코드
public class ReduceTest {
public static void main(String[] args) {
String values[] = {"Hello", "World", "!"};
/* lamda */
String reduce2 = Arrays.stream(values).reduce(new CompareString()).get();
System.out.println(reduce2);
}
}
내부 코드 분석하기
- reduce 메서드
Optional<T> reduce(BinaryOperator<T> accumulator);
- BinaryOperator 인터페이스
@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T> {
...
}
- BiFunction 인터페이스
@FunctionalInterface
public interface BiFunction<T, U, R> {
/**
* Applies this function to the given arguments.
*
* @param t the first function argument
* @param u the second function argument
* @return the function result
*/
R apply(T t, U u);
...
}
BiFunction 인터페이스는 함수형 인터페이스이다. apply 메서드를 우린 CompareString 구현 클래스에서 오버라이드로 재정의를 했고, main 메서드에서 호출한 아래의 코드는 람다식이 사용되어 apply 내부 코드가 실행되어 결과가 출력된다.
String reduce2 = Arrays.stream(values).reduce(new CompareString()).get();
반응형
'Coding > Java' 카테고리의 다른 글
자바 직렬화 Serializable, Externalizable 예제로 이해하기 (0) | 2021.10.20 |
---|---|
JAVA의 비교 interface Comparable vs Comparator 구현하기 (인터페이스 구현, 익명함수, 람다) (0) | 2021.10.19 |
[Java8 람다식] Function interface 간단 예제 (0) | 2021.10.12 |
Optional 의 Map, flatMap 사용하기 (0) | 2021.08.08 |
Optional 선언하기 (빈 Optional, NULL 가능 여부에 따른 Optioanl) (0) | 2021.08.08 |