java排序
自定义排序#
- 返回负数,第一个元素排在第二个元素前面;
- 返回0,第二个元素等于第一个元素;
- 返回正数,第一个元素排在第二个元素后面;
public static int customSorted(String x, String y) {
if (x == null && y != null) {
return 1;
}
else if (x != null && y == null) {
return -1;
}
else if (x == null && y == null) {
return -1;
}
else {
//按照读取的list顺序排序
for (String sort : Arrays.asList("11", "13", "12")) {
if (sort.equals(x) || sort.equals(y)) {
if (x.equals(y)) {
return 0;
}
else if (sort.equals(x)) {
return -1;
}
else {
return 1;
}
}
}
return 0;
}
}
Comparator.comparing和compareTo()#
- 如果是字符串比较就是用compareTo
- 如果是数值比较就用相应的compare比较,是BigDecimal类型的话,也是用compareTo比较就行
sorted和sort#
sort针对于list排序
sorted针对所有可以迭代的集合,并返回一个新的list
下面以2个例子来分别展示sort和sorted分别实现对象中某个字段根据的自定义排序实现相同的排序效果
sorted
dealOneOfferInstAttrs(prodOffInst, result);
prodOfferInsts.stream().sorted(
Comparator.comparing(ProdOffInst::getOffer_type, this::offerShowShorted)
).forEach(o -> dealOneOfferInstAttrs(o, result));
offerShowShorted
为自定义排序方法
private int offerShowShorted(String x, String y) {
//按照读取的list顺序排序
for (String sort : Arrays.asList(CoreDataOffer.OFF_0005_11, CoreDataOffer.OFF_0005_13, CoreDataOffer.OFF_0005_12)) {
if (sort.equals(x) || sort.equals(y)) {
if (x.equals(y)) {
return 0;
}
else if (sort.equals(x)) {
return -1;
}
else {
return 1;
}
}
}
return 0;
}
sort
prodOfferInsts.sort(new Comparator<ProdOffInst>() {
@Override
public int compare(ProdOffInst o1, ProdOffInst o2) {
for (String sort : Arrays.asList(CoreDataOffer.OFF_0005_11, CoreDataOffer.OFF_0005_13, CoreDataOffer.OFF_0005_12)) {
if (sort.equals(o1.getOffer_type()) || sort.equals(o2.getOffer_type())) {
if (o1.getOffer_type().equals(o2.getOffer_type())) {
return 0;
}
else if (sort.equals(o1.getOffer_type())) {
return -1;
}
else {
return 1;
}
}
}
return 0;
}
});
Stream.sorted 多字段排序#
通过Comparator.thenComparing(Comparator<? super T> other) 实现
功能说明:
1.先以年龄升序
2.当年龄相同时,在以零花钱升序
示例功能代码:
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getAge).thenComparing(userInfo::getMoney))
.collect(Collectors.toList());
根据某字段排序,null放最后写法#
if (o1 != null && o2 != null) {
return o1.compareTo(o2);
} else {
return o1 == null ? 1 : -1;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)