728x90
class Product {
private int age;
private String name;
public Product(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
주로 배열이나 컬렉션에 담긴 데이터를 다룰 때 사용한다.
특징 :
스트림은 데이터를 변경하지 않는다. ~ Immutable
재사용이 불가능하다. ~ 최종 연산이 실행된 후 재사용 불가능.
스트림 생성 - 중간 연산 - 최종 연산 => 클래스타입.스트림생성().중개연산().최종연산(); ~ 파이프라인 연산 방식
- 대표 스트림
- 중개 연산자
- 필터링 : filter , distinct
- 변환 : map , flatMap
- 제한 : limit , skip
- 정렬 : sorted
- 최종 연산
- 요소 출력 : forEach
- 요소 검색 : findFirst, findAny
- 요소 통계 : count, min, max
- 요소 연산 : sum, average
- 요소 수집 : collect
- 중개 연산자
실 사용 예제 : 은행관리 프로그램 중
public boolean confirmAccountPwd(String inputAccountNum, String pwd){
Stream<User> userInfo = userList.stream().filter(s -> s.getAccountNum().equals(inputAccountNum));
if(userInfo.anyMatch(s -> s.getPwd().equals(pwd))){
return true;
}
System.out.println("계좌의 비밀번호가 틀립니다!");
return false;
}
* 중개 연산은 Stream을 반환하고, 최종 연산은 Stream을 반환하는 것이 아니라 Stream의 연산으로 나온 값을 반환한다.
예제
filter + anyElement / firstElement
List<String> elements = Stream.of("a", "b", "c")
.filter(element -> element.contains("b"))
.collect(Collectors.toList());
Optional<String> anyElement = elements.stream().findAny();
System.out.println(anyElement.orElse("암것두 없어"));
Optional<String> firstElement = elements.stream().findFirst();
System.out.println(firstElement.orElse("한개두 없어"));
N개의 중개 연산자
Stream<String> onceModifiedStream = Stream.of("abcd", "bbcd", "cbcd");
Stream<String> twiceModifiedStream = onceModifiedStream.skip(1)
.map(element -> element.substring(0, 3));
System.out.println(twiceModifiedStream); //?
System.out.println(twiceModifiedStream.collect(Collectors.toList()));
map 활용
class Product {
private int age;
private String name;
public Product(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
List<Product> productList = Arrays.asList(new Product(23, "potatoes"),
new Product(14, "orange"), new Product(13, "lemon"),
new Product(23, "bread"), new Product(13, "sugar")
);
List<String> collectorCollection = productList.stream()
.map(Product::getName)
.collect(Collectors.toList());
System.out.println(collectorCollection);
double averageAge = productList.stream()
.collect(Collectors.averagingInt(Product::getAge));
System.out.println("나이 평균 : " + averageAge);
int summingAge = productList.stream().mapToInt(Product::getAge).sum();
System.out.println("나이 총합 : " + summingAge);
728x90
'자바☕' 카테고리의 다른 글
엑셀 파일 생성 로직 구현 : Map 활용, 클래스 단위로 응용 가능 (2) | 2024.10.21 |
---|---|
자바 옵셔널(Optional<T>) (0) | 2022.12.11 |
함수형 인터페이스와 람다 표현식 (0) | 2022.12.11 |
Lombok (0) | 2022.12.06 |
자바 표준 Annotation (0) | 2022.12.06 |