๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL/Java

Comparator.comparing() - Java8

by Edlin 2022. 7. 20.

Comparator.comparing ๋ฉ”์†Œ๋“œ

  • Java8๋ถ€ํ„ฐ Comparator์— ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋Š”๋ฐ, comparing์ด ๊ทธ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • static function์ด๋ฉฐ, ์–ด๋–ค ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผํ• ์ง€์— ๊ด€ํ•ด Comparator type์œผ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์šฐ์„  API ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Comparator.comparing๊ณผ ๊ด€๋ จํ•œ ์‚ฌํ•ญ์„ ์ •๋ฆฌํ•œ ๋’ค, PQ์—์„œ ๊ฐ„๋‹จํžˆ Comparator์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์— ๊ด€ํ•ด ์ •๋ฆฌํ•œ๋‹ค.
    • Pirority Queue ์—์„œ ์ƒ์„ฑ ์‹œ, Comparator.comparing๋ฅผ ์ธ์ž๊ฐ’์œผ๋กœ ์ค€๋‹ค๋Š” ๊ฒƒ์€, PQ ๊ฐ์ฒด๋ฅผ ์–ด๋–ค ์‹์œผ๋กœ ์ •๋ ฌํ• ์ง€๋ฅผ parameter ํ˜•์‹์œผ๋กœ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

API

    /**
     * Accepts a function that extracts a {@link java.lang.Comparable
     * Comparable} sort key from a type {@code T}, and returns a {@code
     * Comparator<T>} that compares by that sort key.
     *
     * <p>The returned comparator is serializable if the specified function
     * is also serializable.
     *
     * @apiNote
     * For example, to obtain a {@code Comparator} that compares {@code
     * Person} objects by their last name,
     *
     * <pre>{@code
     *     Comparator<Person> byLastName = Comparator.comparing(Person::getLastName);
     * }</pre>
     *
     * @param  <T> the type of element to be compared
     * @param  <U> the type of the {@code Comparable} sort key
     * @param  keyExtractor the function used to extract the {@link
     *         Comparable} sort key
     * @return a comparator that compares by an extracted key
     * @throws NullPointerException if the argument is null
     * @since 1.8
     */
    public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
            Function<? super T, ? extends U> keyExtractor)
    {
        Objects.requireNonNull(keyExtractor);
        return (Comparator<T> & Serializable)
            (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
    }
  •  Comparable๊ณผ Comparator์€ ๋น„๊ต๋Œ€์ƒ์ด ํ•˜๋‚˜์ธ์ง€ ๋‘๊ฐœ์ธ์ง€์— ๋”ฐ๋ผ์„œ ๊ตฌ๋ถ„๋œ๋‹ค. ์†Œ์†๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ๋‹ค๋ฅด๋‹ค. 
    • Comparable์€ java.lang์— Comparator์€ java.util์— ์†Œ์†๋˜์–ด์žˆ๋‹ค. 

 

comparing()์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ• 1 - Comparator ๊ฐ์ฒด ๋ฐ˜ํ™˜

Comparator<Object> objectComparator = Comparator.comparing(Object::getNumber);

// Array๋Š” Collections๊ฐ€ ์•„๋‹Œ Arrays๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ ๊ฐ€๋Šฅํ•˜๋‹ค.
// Number ์ˆœ๋Œ€๋กœ Array ๊ฐ€ ์ •๋ ฌ๋œ๋‹ค. 
// Arrays.sort(array, ์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•  ๊ฒƒ์ธ๊ฐ€์— ๊ด€ํ•œ ๋ฐฉ๋ฒ• Comparator)
Arrays.sort(arrayObject, objectComparator);

 

comparing()์„ ์ด์šฉํ•˜์—ฌ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฒ•

// 1. ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ 
Comparator<Object> objectComparator = Comparator.comparing(Employee::getName);
Comparator<Object> reversedComparator = objectComparator.reversed();
Arrays.sort(arrayObject, reversedComparator);

// 2. ์ง์ ‘ ์ •์˜ํ•ด์ฃผ์–ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ธฐ
Comparator<Object> reversedComparator2 = Comparator.comparing(Employee::getName, (s1, s2) -> {
	return s2.compareTo(s1);
});

// s2.compareTo ์‚ฌ์šฉ์ด์œ ? s2๋Š” Comparable์„ ์ƒ์†๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ

 

Comparing()์„ PQ์— ์ ์šฉํ•˜๋Š” ๋ฒ•

2022.07.20 - [Algorithm/๋ฐฑ์ค€] - ๋ฐฑ์ค€ 12764 - ์‹ธ์ง€๋ฐฉ์— ๊ฐ„ ์ค€ํ•˜ (์šฐ์„ ์ˆœ์œ„ํ)

 

 

๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋“ค๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งํฌ๋ฅผ ์ฒจ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ €๋Š” comparing์— ๋Œ€ํ•ด์„œ๋งŒ ์•Œ์•„๋ณด์•˜๊ณ  ํ•„์š”ํ•œ ๊ฒƒ์€ ํ•„์š”ํ•  ๋•Œ ๊ณต๋ถ€ํ•˜์—ฌ ์—…๋กœ๋“œ ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 

 

์ฐธ๊ณ ์‚ฌ์ดํŠธ
https://www.baeldung.com/java-8-comparator-comparing
https://st-lab.tistory.com/243
 

Guide to Java 8 Comparator.comparing() | Baeldung

A practical guide to the static functions and instance methods of the Comparable interface that were introduced in Java 8.

www.baeldung.com

 

์ž๋ฐ” [JAVA] - Comparable ๊ณผ Comparator์˜ ์ดํ•ด

์•„๋งˆ ์ด ๊ธ€์„ ์ฐพ์•„ ์˜ค์‹  ๋ถ„๋“ค ๋Œ€๊ฐœ๋Š” Comparable๊ณผ Comparator์˜ ์ฐจ์ด๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๊ฑฐ๋‚˜ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„์˜ค์…จ์„ ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค ์•Œ๊ณ ๋ณด๋ฉด ๋‘ ๊ฐœ๋Š” ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์œผ๋‚˜ ์•„๋ฌด๋ž˜๋„ ์ž๋ฐ”๋ฅผ ํ•™์Šตํ•˜๋ฉด์„œ ๊ฐ

st-lab.tistory.com

 

๋Œ“๊ธ€