我正在编写一些自定义比较器,并且希望它们将空项目推到列表的底部,而不管我是对升序还是对降序排序。解决这个问题的最佳策略或模式是什么?
副手:
还有其他策略吗?我想听听使用不同方法的经验,以及各种策略的陷阱。
最后一个选择对我很有吸引力。比较器非常好地链接在一起。特别是,您可能希望同时编写ReverseComparator
和NullWrappingComparator
。
编辑:您不必自己编写。如果您查看Google收藏库中的Ordering类,您会发现它以及其他各种好东西:)
编辑:进入更多细节以显示我的意思ReverseComparator
…
一个警告的词-在a的实现中ReverseComparator
,颠倒参数的顺序,而不是求反,否则Integer.MIN_VALUE
将“颠倒”自身。
所以这个实现是错误的(假设original
比较器要反向):
public int compare(T x, T y)
{
return -original.compare(x, y);
}
但这是正确的:
public int compare(T x, T y)
{
return original.compare(y, x);
}
原因是,我们总是希望扭转比较,但如果original.compare(x, y)
回报率int.MIN_VALUE
,那么坏的比较器将 还
回int.MIN_VALUE
,这是不正确。这是由于那个有趣的特性int.MIN_VALUE == -int.MIN_VALUE
。
问题内容: 我正在编写一个将学校表连接到地区表的SQL查询。每个学校都隶属于一个地区的简单一对多关系。我的查询如下: 我之所以加入左派,是因为并非每所学校都隶属于一个地区。例如,一所学校可能是在家上学的,其中可能包含所有在家上学的学生。那不会在一个地区。 所以我想做的是使用ORDER BY来按地区名称排序,然后按学校名称排序。唯一的问题是,我希望空区位于底部,以便可以在输出末尾使用名为“其他”的组
上一章介绍了很多排序算法, 插入排序、选择排序、 归并排序等等,这些算法都属于 内部排序算法,即排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘),这时就需要用到本章介绍的 外部排序算法来解决。 外部排序算法由两个阶段构成: 按照内存大小,将大文件分成若干长度为 l 的子文件(l 应小于内存的可使
null field2和field3为空的所有字段 所有field2为空、field3为值的字段 所有field3为空、field2为值的字段 到目前为止,我已经使用了三个与UNION连接的查询 我自己觉得这是很多必要的代码来得到它的秩序,并希望有一个更好的解决方案。 那么有没有更好的办法呢?
问题内容: 我有以下HTML格式,将给定元素放在桌面顶部和移动设备底部(宽度<640像素)的有效方法是什么?由于存在许多不同的设备,因此我不想编写位置坐标,因为页面高度的内容会有所不同。有什么建议么? 问题答案: 使用Flexbox最好以响应方式对未知高度的元素进行重新排序。虽然对桌面浏览器的支持不是很好(IE是此处的主要限制因素,但支持从v10开始),但大多数移动浏览器 都 支持。 请注意,Fl
问题内容: 我可以阅读 MySQL 文档,这很清楚。但是,如何决定要使用哪个字符集?整理对哪些数据有影响? 我要求对两者以及如何选择它们进行解释。 问题答案: 从MySQL 文档: 甲 字符集 是一组符号和编码。甲 归类 为在一个字符集的字符进行比较的一组规则。让我们通过一个假想字符集的例子来清楚地区分。 假设我们有一个包含四个字母的字母:“ A”,“ B”,“ a”,“ b”。我们给每个字母一个
当我们在debian机器中使用g编译下面的代码时,会生成以下错误。。。有人能帮我解释一下为什么会出现错误吗?我试着注释排序行,然后出现错误,但是我们的任务需要排序,那么可能的解决方案是什么 代码: 输出: 在/usr/include/c/4.7/algorithm:63:0中包含的文件中,来自testvect。cpp:3:/usr/include/c/4.7/bits/stl\u algo。h: