等同于比较器的身份操作

是否可能存在Comparator的身份表示?

在寻找简化Removing overloaded method in Java中代码的过程中,我想到了这一点,并得出结论,如果每次比较都导致对象相等,则顺序实际上不会改变,从而使操作成为 identity 。因此,我最终得到了这样一个(效率低下的)建议:

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,234234,234,-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,-34]
[1,-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,Aadasd]

Set<Integer> integerSet = Set.of(1,-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,1,0]
[-34,0]

Set<String> stringSet = Set.of("aadad","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,Aadasd,aadad]
[zadad,aadad]
b1004940 回答:等同于比较器的身份操作

sorted(Comparator)的Javadoc说:

  

对于排序的流,排序为稳定

     

对于无序流,没有稳定性保证

当然,对于无序流,“身份”排序实际上并不是一件真正的事情,因此,是的,“常量比较器”是该中的“身份顺序”有序流保持其顺序,而无序流保持无序。

本文链接:https://www.f2er.com/3131510.html

大家都在问