Есть ли возможное идентификационное представление Comparator
, которое могло бы существовать?
В поисках упрощения кода в Удаление перегруженного метода в Java , я подумал об этом и закончилзаключив, что если каждое сравнение приведет к тому, что объекты будут равны, порядок на самом деле не изменится, сделав операцию идентичность . Поэтому я получил (неэффективное) предложение, такое как:
public static <T, G> List<G> toListOfNewType(List<T> inputList, Function<T, G> mapperFunction) {
return toListOfNewType(inputList, mapperFunction, (a, b) -> 0); // overloaded with comparator for 'G' type
}
Но что мне теперь интересно, будет ли это справедливо и для объектов с их пользовательскими реализациями compareTo
? Действительно ли безопасно предположить это, учитывая реализацию Stream
?
Редактировать : Некоторые тесты, которые я пробовал и которые сохранили порядок, были следующими:
List<Integer> integers = List.of(1, 3, 45356, 47424, 34234, 4, 4, 234234, 234, 0, -23, -34);
System.out.println(integers);
System.out.println(integers.stream().sorted((a, b) -> 0).collect(Collectors.toList()));
System.out.println(integers.stream().sorted((a, b) -> 0).parallel().collect(Collectors.toList()));
[1, 3, 45356, 47424, 34234, 4, 4, 234234, 234, 0, -23, -34]
[1, 3, 45356, 47424, 34234, 4, 4, 234234, 234, 0, -23, -34]
[1, 3, 45356, 47424, 34234, 4, 4, 234234, 234, 0, -23, -34]
List<String> strings = List.of("aadad", "Z", "vsadasd", "zadad", "C", "Aadasd");
System.out.println(strings);
System.out.println(strings.stream().sorted((a, b) -> 0).collect(Collectors.toList()));
System.out.println(strings.stream().sorted((a, b) -> 0).parallel().collect(Collectors.toList()));
[aadad, Z, vsadasd, zadad, C, Aadasd]
[aadad, Z, vsadasd, zadad, C, Aadasd]
[aadad, Z, vsadasd, zadad, C, Aadasd]
Set<Integer> integerSet = Set.of(1, 3, 45356, 47424, 34234, 4, 234234, 234, 0, -23, -34);
System.out.println(integerSet);
System.out.println(integerSet.stream().sorted((a, b) -> 0).parallel().collect(Collectors.toList()));
System.out.println(integerSet.stream().sorted((a, b) -> 0).collect(Collectors.toList()));
[-34, 45356, 47424, 234, -23, 234234, 1, 34234, 3, 4, 0]
[-34, 45356, 47424, 234, -23, 234234, 1, 34234, 3, 4, 0]
[-34, 45356, 47424, 234, -23, 234234, 1, 34234, 3, 4, 0]
Set<String> stringSet = Set.of("aadad", "Z", "vsadasd", "zadad", "C", "Aadasd");
System.out.println(stringSet);
System.out.println(stringSet.stream().sorted((a, b) -> 0).collect(Collectors.toList()));
System.out.println(stringSet.stream().sorted((a, b) -> 0).parallel().collect(Collectors.toList()));
[zadad, Z, vsadasd, C, Aadasd, aadad]
[zadad, Z, vsadasd, C, Aadasd, aadad]
[zadad, Z, vsadasd, C, Aadasd, aadad]