@Data
@Accessors(chain = true)
static class User {
private String id;
private String name;
}
static class ComparatorByList<T, R> implements Comparator<T> {
private Function<? super T, ? extends R> keyExtractor;
private List<R> byList;
public ComparatorByList(Function<? super T, ? extends R> keyExtractor, List<R> byList) {
this.keyExtractor = keyExtractor;
this.byList = byList;
}
@Override
public int compare(T o1, T o2) {
int o1Index = byList.indexOf(keyExtractor.apply(o1));
if (o1Index == -1) {
o1Index = Integer.MAX_VALUE;
}
int o2Index = byList.indexOf(keyExtractor.appl