Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

KSI일기장

java 람다식 Stream 중간연산과 최종연산의 종류 본문

Java

java 람다식 Stream 중간연산과 최종연산의 종류

MyDiaryYo 2023. 8. 9. 18:39

-중간 연산 종류와 의미

 

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