Я пытаюсь реализовать сортировку для Generics в Java. Вот это абстрактный класс Function (T мой «ключ» для сортировки):Сортировка списка дженериков в Java?
public abstract class Function<T extends Comparable<T>, S> {
abstract public T compute(S o);
}
Вот класс для наложения, метод которого «применить» сортирует список в соответствии с результатом «вычислений»:
import java.util.ArrayList;
import java.util.Iterator;
public class Applier<T extends Comparable<T>, S> {
ArrayList<S> apply(ArrayList<S> input, Function<T, S> function) {
ArrayList<T> output = new ArrayList<>();
for(Iterator<S> it = input.iterator(); it.hasNext();){
output.add(function.compute(it.next()));
}
T tmpTi, tmpTj;
S tmpSi, tmpSj;
for(int i=0; i<input.size(); i++) {
for(int j=i+1; j<input.size(); j++) {
if(output.get(i).compareTo(output.get(j))>0) {
tmpTi = output.get(i);
tmpTj = output.get(j);
output.remove(j);
output.remove(i);
output.add(i, tmpTi);
output.add(i, tmpTj);
tmpSi = input.get(i);
tmpSj = input.get(j);
input.remove(j);
input.remove(i);
input.add(i, tmpSj);
input.add(j, tmpSi);
}
}
}
return input;
}
}
Мой вопрос: есть ли более разумный способ сделать эту сортировку, может быть, не с помощью пузырьков? Здесь также основной класс:
public static void main(String[] args) {
Applier a = new Applier<>();
StringLength strlen = new StringLength();
ArrayList<String> array = new ArrayList<>();
array.add("Hola");
array.add("Man");
array.add("randomstufff");
array.add("Zerrone");
array.add("Info3a");
System.out.println("Order by length");
System.out.print("before: ");
System.out.println(array);
a.apply(array, strlen); //works on original object
System.out.print("After: ");
System.out.println(array);
Is [Collections.sort] (https://docs.oracle.com/javase/7/docs/api/java/util/Collections. html # sort (java.util.List)) достаточно умный? –
в Java 8, у вас есть 'ArrayList.sort()' http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#sort-java.util.Comparator- –
Предполагая у вас есть Java8: 'input.sort (Comparator.comparing (el -> function.compute (el))) –