JAVA - 람다와 스트림(9)

jodbsgh·2022년 5월 2일
0

💡"JAVA"

목록 보기
62/67

스트림의 중간연산

스트림 자르기 - skip(), limit()

Stream<T> skip(long n)			//앞에서부터 n개 건너뛰기
Stream<T> limit(long maxSize)	//maxSize 이후의 요소는 잘라냄

/*--------------------*/

IntStream intStream = IntStream.rangeClosed(1, 10);		// 12345678910
IntStream.skip(3).limit(5).forEach(System.out::print);	// 45678

스트림의 요소 걸래내기 - filter(), distinct()

Stream<T> filter(Predicate Predicate)	// 조건에 맞지 않는 요소 제거
Stream<T> distinct()	// 중복제거

/*--------------------*/

IntStream intStream = IntStream.of(1,2,2,3,3,3,4,5,5,6);
intStream.distinct().forEach(System.out::print);		// 123456

/*--------------------*/

IntStream intStream = IntStream.rangeClosed(1, 10);	//12345678910
intStream.filter(i-> i%2==0).forEach(System.out::print);	// 246810

/*--------------------*/

intStream.filter(i->i%2!=0 && i%3!=0).forEach(System.out::print);
intStream.filter(i->i%2!=0).filter(i->i%3!=0).forEach(System.out::print);

스트림 정렬하기 - sorted()

Stream<T> sorted()		//스트림 요소의 기본 정렬(Comparable)로 정렬
Stream<T> sorted(Comparator comparator)	//지정된 Comparator로 정렬
  • Comparator의 comparing으로 정렬 기준을 제공
comparing(Function<T, U> keyExtractor)
comparing(Function<T, U> keyExtractor, comparator<U> keyComparator)

/*--------------------*/

studentStream.sorted(Comparator.comparing.Student::getBan) //반별로 정렬
.forEach(System.out::println);
  • 추가 정렬 기준을 제공할 때는 thenComparing()을 사용
thenComparing(Comparator<T> other)
thenComparing(Function<T, U> keyExtractor)
thenComparing(Function<T, U> keyExtractor, Comparator<U> keyComp)

/*--------------------*/

studentStream.sorted(Comparator.comparing(Student::getBan)	//반별로 정렬
			.thenComparing(Student::getTotalScore)	//총점별로 정렬
            .thenComparing(Student::getName))		//이름별로 정렬
            .forEach(System.out::println);

예제

class Test{
	public static void main(String[] args)
    {
    	Stream<Student> studentStream = Stream.of(
        	new Student("이자바", 3, 300),
            new Student("김자바", 1, 200),
            new Student("안자바", 2, 100),
            new Student("박자바", 2, 150),
            new Student("소자바", 1, 200),
            new Student("나자바", 3, 290),
            new Student("감자바", 3, 180)
    	);
    
    studentStream.sorted(Comparator.comparing(Student::getBan) //반별 정렬
    		.thenComparing(Comparator.naturalOrder()))		   //기본정렬
            .forEach(System.out::println);
    }
}

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);
    }
    
    String getName()	{return name;}
    int getBan()		{return ban; }
    int getTotalScore() {return totalScore;}
    
    public int compareTo(Student s)
    {
    	return s.totalScore - thus.totalScore;
    }
}
profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글