KSI일기장
java 람다식 Stream 중간연산과 최종연산의 종류 본문
-중간 연산 종류와 의미
Stream<T> distinct() : 중복 제거 시킨다
//distinct 중복제거
IntStream intStr = IntStream.of(1,2,2,3,3,3,4,5,5);
intStr.distinct().forEach(System.out::print);
Stream<T> filter(<조건식>) : 조건에 안맞는 요소 제외 시킨다
//filter 조건
//3의 배수 출력
IntStream intfil = IntStream.rangeClosed(1, 10);
intfil.filter(i->i%3==0).forEach(System.out::println);
System.out.println("****************************************************");
//2의 배수와 3의 배수가 아닌 수 출력
IntStream intfil2 = IntStream.rangeClosed(1, 10);
intfil2.filter(i->i%3!=0 && i%2!=0).forEach(System.out::println);
Stream<T> limit() : 스트림 일부를 잘라낸다
Stream<T> skip() : ()안의 수 만큼 건너뛰고 나머지만 반환된다
Stream<T> peek() : 작업 사이에 넣어 중간결과를 확인하고자 할때
Stream<T> sorted() : 스트림 요소 정렬한다
strStream.sorted() // 기본정렬 aabccDddd
strStream.sorted(Comparator.reverseOrder()) //기본정렬 역순으로 정렬 dddDccbaa
strStream.sorted(Comparator.comparing(String::length) //길이 순 정렬 dddaaccbD
strStream.sorted(Comparator.comparingInt(String::length).reversed()) //길이 순을 역순으로 정렬 Dbccaaddd
import java.util.Comparator;
import java.util.stream.Stream;
public class StreamEx4 {
public static void main(String[] args) {
Stream<Student> stdStream = Stream.of(
new Student("홍길동", 1, 100), new Student("김길동", 2, 150),
new Student("홍기동", 2, 180), new Student("김길동", 3, 120)
);
//기본정렬 (총점 내림차순)
stdStream.sorted().forEach(System.out::println);;
}
static class Student implements Comparable<Student> {
String name;
int ban;
int totalScore;
Student(String name, int ban, int totalScore) {
this.name = name;
this.ban = ban;
this.totalScore = totalScore;
}
public String toString() {
return String.format("[%s, %d, %d]", name, ban, totalScore);
}
// -> name, ban, totalScore를 [%s(문자열), %d(숫자), %d(숫자)] 형식으로 표현한다는 의미
String getName() {
return name;
}
int getBan() {
return ban;
}
int getTotalScore() {
return totalScore;
}
//기본정렬을 총점 내림차순으로(-this.totalScore)
public int compareTo(Student s) {
return s.totalScore - this.totalScore;
}
}
}
//반별로 정렬하고 총점(현재 내림차순)을 역순으로
stdStream.sorted(Comparator.comparing(Student::getBan)
.thenComparing(Comparator.naturalOrder()).reversed()).forEach(System.out::println);
//-> 람다식으로 변경하기
stdStream.sorted(Comparator.comparing((Student s) -> s.getBan())
.thenComparing(Comparator.naturalOrder()).reversed()).forEach(System.out::println);
-최종 연산 종류와 의미
forEach()
count() : 스트림 요소의 개수 반환
findAny : filter랑 같이 쓰여서 조건에 맞는 스트림 요소 중 아무거나 하나 반환
findFirst() : filter랑 같이 쓰여서 조건에 맞는 스트림 요소 중 첫 번째 하나 반환
boolean allMatch(조건식) : 스트림 요소 중 조건을 모두 만족하는지 확인
boolean anyMatch(조건식) : 스트림 요소 중 조건을 하나라도 만족하는지
boolean noneMatch(조건식) : 스트림 요소 중 조건을 모두 만족하지 않는지
toArray() : 스트림 요소를 배열로 반환
reduce() : 스트림의 요소를 하나씩 줄여가면서 계산한다. ex)sum, reduce
collect() : 스트림 요소를 수집, 주로 요소를 그룹화하거나 분활한 결과를 컬렉션에 담아 반환하는데 사용된다.
'Java' 카테고리의 다른 글
charAt과 substring의 차이 (0) | 2023.11.30 |
---|---|
향상된 for문 (1) | 2023.11.29 |
JavaScript insertAdjacentText()메서드 (0) | 2023.11.01 |
JavaScript 프라미스, async와 await (0) | 2023.11.01 |
java stream 생성 및 출력 (0) | 2023.08.08 |