网站首页 > 精选教程 正文
在 Java 中,可以通过多种方式和库对数据进行排序。我所知道的JAVA排序有:
升序排序
使用stream:
List<Integer> list = Arrays.asList(5, 2, 8, 1, 3);
List<Integer> sortedList = list.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(sortedList); // [1, 2, 3, 5, 8]
或者使用java.util.Collections:
List<Integer> list = Arrays.asList(5, 2, 8, 1, 3);
Collections.sort(list);
System.out.println(list); // [1, 2, 3, 5, 8]
或者使用java.util.Arrays:
int[] array = {5, 2, 8, 1, 3};
Arrays.sort(array);
System.out.println(Arrays.toString(array)); // [1, 2, 3, 5, 8]
降序排序
List<Integer> sortedList = list.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
System.out.println(sortedList); // [8, 5, 3, 2, 1]
或者使用lamda表达来生成一个降序排列的自定义compator
List<Integer> sortedList = list.stream()
.sorted((a,b) -> b - a)
.collect(Collectors.toList());
System.out.println(sortedList); //[8, 5, 3, 2, 1]
Parallel 排序(并行排序)
适用于较大的数据量,且对性能有要求的场景。
int[] array = {5, 2, 8, 1, 3};
Arrays.parallelSort(array);
List<Integer> sortedList = Arrays.asList(array);
System.out.println(Arrays.toString(array));
System.out.println(sortedList); //[8, 5, 3, 2, 1]
随机排列
Collections.shuffle 用于对 列表(List)中的元素进行 随机排列,改变元素的顺序,使之成为一种 非确定性随机顺序。
import java.util.Collections;
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Collections.shuffle(list);
System.out.println(list); // 输出可能是 [3, 5, 1, 4, 2],每次运行结果不同
排序且去重
list.stream().distinct().sorted().collect(Collectors.toList());
字符串排序
按照字母排序:
String[] names = {"Charlie", "Alice", "Bob"};
Arrays.sort(names); // 按长度排序
System.out.println(Arrays.toString(names)); // [Bob, Alice, Charlie]
按照字符串长度排序:
String[] names = {"Charlie", "Alice", "Bob"};
Arrays.sort(names, Comparator.comparing(String::length)); // 按长度排序
System.out.println(Arrays.toString(names)); // [Bob, Alice, Chaarlie]
//or
Arrays.sort(names, (a, b) -> b.length() - a.length()); // 按长度降序排序
System.out.println(Arrays.toString(names)); // [Charlie, Alice, Bob]
按对象属性排序
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
people.sort(new Comparator<Person>() {
@Override
public int compare(Person p1, Person p2) {
return p1.name.compareTo(p2.name);
}
});
或者使用lambda
people.sort((p1, p2) -> p1.age - p2.age);
System.out.println(people); // 按年龄升序排序
或结合 Comparator 的静态方法:
people.sort(Comparator.comparingInt(p -> p.age));
多字段排序
people.sort(
Comparator.comparing(Person::getAge)
.thenComparing(Person::getName)
);
按字段逆序排序
people.sort(Comparator.comparing(Person::getAge).reversed());
处理可能为 null 的字段时,可以使用 nullsFirst 或 nullsLast。
people.sort( Comparator.comparing(Person::getName, Comparator.nullsFirst(String::compareTo)) );
我们可根据场景自取合适的排序方式。
猜你喜欢
- 2024-12-15 源码级Java低代码核心能力:列表引擎(jvs-list)
- 2024-12-15 谈谈路由系统的设计方法 网络路由的设计与实现
- 2024-12-15 根据某个关键字的指定顺序,重新对数据源快速排序!
- 2024-12-15 list列表函数&方法 list函数怎么用
- 2024-12-15 一学就废|Python基础碎片,列表(List)
- 2024-12-15 Java中List,Set,Map三者的区别? list set和map区别
- 2024-12-15 2 万字长文详解 10 大多线程面试题|原力计划
- 2024-12-15 深入理解:推荐系统中的召回与排序(一)
- 2024-12-15 Java 集合排序策略接口 Comparator
- 2024-12-15 python教程从基础到精通,第5课—List列表
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)