关于List排序的三种方式
·
1.使用Comparable进行排序
2.使用Comparator进行排序
3.使用Stream表达式进行排序(JDK8遍历)
1.Comparable排序
public class ListSortExample {
public static void main(String[] args) {
// 创建并初始化 List
List<StatusTrackVo > list = new ArrayList<StatusTrackVo >() {{
add(new StatusTrackVo("待审核",100));
add(new StatusTrackVo("待缴费",102));
add(new StatusTrackVo("立案",200));
}};
// 使用 Comparable 自定的规则进行排序
Collections.sort(list);
// 打印 list 集合
list.forEach(p -> {
System.out.println(p);
});
}
}
// 以下 set/get/toString 使用的是 lombok 的注解
@Getter
@Setter
@ToString
class StatusTrackVo implements Comparable<StatusTrackVo> {
private String name;
private Integer code;
public StatusTrackVo( String name,Integer code) {
this.code= code;
this.name = name;
}
// 从大到小 如果要从小到大 就把内容改成this.getAge() - p.getAge();
@Override
public int compareTo(StatusTrackVo p) {
return p.getCode() - this.getCode();
}
}
2.使用Comparator进行排序
public class ListSortExample2 {
public static void main(String[] args) {
// 创建并初始化 List
List<StatusTrackVo> list = new ArrayList<StatusTrackVo>() {{
add(new StatusTrackVo("待审核",100));
add(new StatusTrackVo("待缴费",102));
add(new StatusTrackVo("立案",200));
}};
// 使用 Comparator 比较器排序
Collections.sort(list, new StatusTrackVoComparator());
// 打印 list 集合
list.forEach(p -> {
System.out.println(p);
});
}
}
/**
* 新建 Person 比较器
*/
class StatusTrackVoComparatorimplements Comparator<StatusTrackVo> {
@Override
public int compare(StatusTrackVo p1, StatusTrackVo p2) {
return p2.getCode() - p1.getCode();
}
}
@Getter
@Setter
@ToString
class StatusTrackVo{
private String name;
private Integer code;
public StatusTrackVo( String name,Integer code) {
this.code= code;
this.name = name;
}
}
3.使用Stream表达式进行排序(JDK8遍历)
public class ListSortExample4 {
public static void main(String[] args) {
// 创建并初始化 List
List<StatusTrackVo> list = new ArrayList<StatusTrackVo>() {{
add(new StatusTrackVo("待审核",100));
add(new StatusTrackVo("待缴费",102));
add(new StatusTrackVo("立案",200));
}};
// 按照[年龄]正序,但年龄中有一个 null 值
list = list.stream().sorted(Comparator.comparing(StatusTrackVo::getCode,
Comparator.nullsFirst(Integer::compareTo)))
.collect(Collectors.toList());
// 打印 list 集合
list.forEach(p -> {
System.out.println(p);
});
}
}
@Getter
@Setter
@ToString
class StatusTrackVo{
private String name;
private Integer code;
public StatusTrackVo( String name,Integer code) {
this.code= code;
this.name = name;
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)