3 ms·
Java's Comparator type is more general (you don't necessarily need to project the type for comparison) and an existing abstraction. It's not hard to introduce a
by jargonjustin 13y ago
Java's Comparator type is more general (you don't necessarily need to project the type for comparison) and an existing abstraction. It's not hard to introduce a combinator to transform the representation as a library, as in:
countries.sorted(by(x -> x.population)).limit(3).map(x -> x.name)
where `by` looks something like:
<S, T> Comparator<T> by(Projection<S, T> projection);
interface Projection<S, T> {
Comparable<S> project(T value);
}
- barrkel 13y agoSure; and you'd have to import the thing that contains 'by'. It's still ugly, and would prevent e.g. a radix sort being used when projecting an integer as the sort key, or American flag sort for strings.
- javafu2 13y agoIt already exists in the API. Your type Projection is a Function, and by is called comparing in interface Comparator. so one can write: ``` contries.sorted(comparingInt(Country::getPopulation)). ... ```