Comparator.comparing
๋ฉ์๋
- Java8๋ถํฐ
Comparator
์ ์ธํฐํ์ด์ค์ ๋ฉ์๋๊ฐ ์ถ๊ฐ๋์๋๋ฐ,comparing
์ด ๊ทธ ์ค ํ๋์ด๋ค. static function
์ด๋ฉฐ, ์ด๋ค ์์ผ๋ก ์ ๋ ฌํด์ผํ ์ง์ ๊ดํดComparator type
์ผ๋ก ๋ฐํํ๋ค.- ์ฐ์ API ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ
Comparator.comparing
๊ณผ ๊ด๋ จํ ์ฌํญ์ ์ ๋ฆฌํ ๋ค, PQ์์ ๊ฐ๋จํComparator
์ ์ฌ์ฉํ๋ ๋ฒ์ ๊ดํด ์ ๋ฆฌํ๋ค.- Pirority Queue ์์ ์์ฑ ์,
Comparator.comparing
๋ฅผ ์ธ์๊ฐ์ผ๋ก ์ค๋ค๋ ๊ฒ์, PQ ๊ฐ์ฒด๋ฅผ ์ด๋ค ์์ผ๋ก ์ ๋ ฌํ ์ง๋ฅผparameter
ํ์์ผ๋ก ์๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
- Pirority Queue ์์ ์์ฑ ์,
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
๋๊ธ