Developer Sang Guy

Stram Api를 활용한 정렬 본문

Java

Stram Api를 활용한 정렬

은크 2024. 7. 18. 16:09

Stram Api를 활용한 정렬, 이중 정렬, 오름차순, 내림차순 적용 방법을 알아보자

 

 

정렬에 사용할 User 클래스

@Builder
@Getter
@ToString
public class User {

	private String name;
	private Integer age;
}

 

 

정렬에 사용할 Sample User List

List<User> users = Arrays.asList(
        User.builder().name("김씨").age(25).build(),
        User.builder().name("김씨").age(16).build(),
        User.builder().name("김씨").age(33).build(),
        User.builder().name("이씨").age(19).build(),
        User.builder().name("정씨").age(22).build());

 

 

코드 및 결과

/* 이름 오름차순 */
Comparator<User> nameDesc = Comparator.comparing(User::getName);
users.stream().sorted(nameDesc).forEach(System.out::println);

/* 결과 */
User(name=김씨, age=25)
User(name=김씨, age=16)
User(name=김씨, age=33)
User(name=이씨, age=19)
User(name=정씨, age=22)


/* 이름 내림차순 */
Comparator<User> nameAsc = Comparator.comparing(User::getName, Comparator.reverseOrder());
users.stream().sorted(nameAsc).forEach(System.out::println);

/* 결과 */
User(name=정씨, age=22)
User(name=이씨, age=19)
User(name=김씨, age=25)
User(name=김씨, age=16)
User(name=김씨, age=33)


/* 이름 오름차순, 이름 같을 경우 나이 오름차순 */
Comparator<User> nameDescAndAgeDesc = Comparator.comparing(User::getName).thenComparing(User::getAge);
users.stream().sorted(nameDescAndAgeDesc).forEach(System.out::println);

/* 결과 */
User(name=김씨, age=16)
User(name=김씨, age=25)
User(name=김씨, age=33)
User(name=이씨, age=19)
User(name=정씨, age=22)


/* 이름 오름차순, 이름 같을 경우 나이 내림차순 */
Comparator<User> nameDescAndAgeAsc = Comparator.comparing(User::getName).thenComparing(User::getAge, Comparator.reverseOrder());
users.stream().sorted(nameDescAndAgeAsc).forEach(System.out::println);

/* 결과 */
User(name=김씨, age=33)
User(name=김씨, age=25)
User(name=김씨, age=16)
User(name=이씨, age=19)
User(name=정씨, age=22)

 

Comments