栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果使用自定义Comparator创建,则为SortedMap生成的流的流特征可能不会被排序

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果使用自定义Comparator创建,则为SortedMap生成的流的流特征可能不会被排序

弗朗在他的评论中是绝对正确的。

SORTED
仅针对自然秩序进行了报道,并且之前对此进行了辩论。首先,它甚至在内部被用作标记
isNaturalSort

    OfRef(AbstractPipeline<?, T, ?> upstream) {        super(upstream, StreamShape.REFERENCE,   StreamOpFlag.IS_ORDERED | StreamOpFlag.IS_SORTED);        this.isNaturalSort = true;

相同的标志

isNaturalSort
被设置为
false
通过使用时
sorted(CustomComparator)

这是 一个内部 细节,看来jdk开发人员并没有发现实现此类有用的功能-可能与之无关的功能确实有用。但这可能会改变…

这里仍然至少存在一个缺陷。想象一个这样的类:

static class User implements Comparable<User> {    private final int id;    public User(int id) {        super();        this.id = id;    }    public int getId() {        return id;    }    @Override    public int compareTo(User usr) {        return 42; // don't do this    }}

和一些流操作:

Stream<User> byId = Stream.of(new User(12), new User(10)) .sorted(Comparator.comparing(User::getId));System.out.println(byId.spliterator().hasCharacteristics(Spliterator.SORTED));Stream<User> natural = Stream.of(new User(12), new User(10)) .sorted(Comparator.naturalOrder());System.out.println(natural.spliterator().hasCharacteristics(Spliterator.SORTED));Stream<User> plain = Stream.of(new User(12), new User(10)).sorted();System.out.println(plain.spliterator().hasCharacteristics(Spliterator.SORTED));

前两个报告

false
,但最后一个报告
true
; 这 至少 很奇怪。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号