오답노트
[Java] 스트림 본문
스트림
자료의 대상과 관계없이 동일한 연산을 수행하고, 배열, 컬렉션을 대상으로 연산을 수행한다.
단, 한번 생성하고 사용한 스트림은 재사용 할 수 없다.
- 중간 연산 : 중간 연산은 여러 개의 연산이 적용될 수 있다. 하지만 그 결과는 최종 연산이 호출 후에 적용된다. 이를 지연 연산이라고 한다. (ex. filter, map,sorted 등)
- 최종 연산 : 마지막 한 번만 적용된다. (ex. sum, count, forEach)
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class ArrayListStreamTest {
public static void main(String[] args) {
List<String> sList = new ArrayList<String>();
sList.add("Tomas");
sList.add("Edward");
sList.add("Jack");
Stream<String> strstream = sList.stream();
strstream.forEach(s -> System.out.println(s));
sList.stream().sorted().forEach(s -> System.out.print(s + "\t"));
System.out.println();
sList.stream().map(s->s.length()).forEach(n -> System.out.print(n + "\t"));
System.out.println();
sList.stream().filter(s->s.length() >= 5).forEach(s -> System.out.print(s + "\t"));
}
}
reduce 연산
위에서 사용한 연산과 달리 사용자가 직접 구현한 연산을 적용할 수 있다.
람다식을 구현하거나 람다식이 길면 BinaryOperator를 구현하여 사용할 수 있다.
import java.util.Arrays;
import java.util.function.BinaryOperator;
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 greetings[] = {"안녕하세요~~~", "Hello", "Goood morning", "반갑습니다"};
System.out.println(Arrays.stream(greetings).reduce("",(s1,s2)->
{
if(s1.getBytes().length >= s2.getBytes().length) return s1;
else return s2;
}
));
String str = Arrays.stream(greetings).reduce(new CompareString()).get();
System.out.println(str);
}
}
'Java' 카테고리의 다른 글
[Java] 사용자 정의 예외 처리 (0) | 2023.07.10 |
---|---|
[Java] 예외 처리 (0) | 2023.07.10 |
[Java] 람다식 (0) | 2023.07.10 |
[Java] 지역 내부 클래스와 익명 내부 클래스 (0) | 2023.07.10 |
[Java] 추상화 (0) | 2023.07.08 |