stream interface 파먹어보기
import java.util.*;
import java.util.stream.*;
public class StreamExamples {
public static void main(String[] args) {
// 예제를 위한 리스트 생성
List<String> items = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
// filter 예제: "b"로 시작하는 요소만 필터링
List<String> filtered = items.stream()
.filter(s -> s.startsWith("b"))
.collect(Collectors.toList());
System.out.println(filtered); // [banana]
// map 예제: 모든 요소의 길이로 매핑
List<Integer> itemLengths = items.stream()
.map(String::length)
.collect(Collectors.toList());
System.out.println(itemLengths); // [5, 6, 6, 4, 10]
// sorted 예제: 알파벳순으로 정렬
List<String> sortedItems = items.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedItems); // [apple, banana, cherry, date, elderberry]
// forEach 예제: 각 요소를 대문자로 출력
items.stream()
.map(String::toUpperCase)
.forEach(System.out::println);
// reduce 예제: 문자열 연결
Optional<String> concatenatedString = items.stream()
.reduce((acc, item) -> acc + ", " + item);
concatenatedString.ifPresent(System.out::println); // apple, banana, cherry, date, elderberry
// limit 예제: 스트림의 첫 3개 요소만 가져오기
List<String> limitedItems = items.stream()
.limit(3)
.collect(Collectors.toList());
System.out.println(limitedItems); // [apple, banana, cherry]
// skip 예제: 처음 두 요소 건너뛰기
List<String> skippedItems = items.stream()
.skip(2)
.collect(Collectors.toList());
System.out.println(skippedItems); // [cherry, date, elderberry]
// anyMatch 예제: "d"로 시작하는 요소가 있는지 검사
boolean anyMatchResult = items.stream()
.anyMatch(s -> s.startsWith("d"));
System.out.println(anyMatchResult); // true
// allMatch 예제: 모든 요소가 소문자인지 검사
boolean allMatchResult = items.stream()
.allMatch(s -> Character.isLowerCase(s.charAt(0)));
System.out.println(allMatchResult); // true
// noneMatch 예제: 숫자로 시작하는 요소가 없는지 검사
boolean noneMatchResult = items.stream()
.noneMatch(s -> Character.isDigit(s.charAt(0)));
System.out.println(noneMatchResult); // true
// findFirst 예제: 첫 번째 요소 찾기
Optional<String> firstItem = items.stream()
.findFirst();
System.out.println(firstItem.orElse("No items found")); // apple
// findAny 예제: 어떤 요소라도 찾기 (병렬 스트림에서 더 유용)
Optional<String> anyItem = items.parallelStream()
.findAny();
System.out.println(anyItem.orElse("No items found")); // 결과는 실행할 때마다 달라질 수 있음
}
}