Java steam 中排序的用法

简介: 排序的用法

案例一:

  • Comparator多属性排序: 先按名字不分大小写排,再按GID倒序排,最后按年龄正序排
@AllArgsConstructor
@Data
public class Person {
    private String name;
    private String gid;
    private Integer age;
}
import com.google.common.collect.Lists;
import com.ultra.cmp.report.dto.Person;
import java.util.Comparator;
import java.util.List;
/**
 * @author ygf
 * @date 2022/9/2 9:26
 */
public class TestPer {
    public static void main(String[] args) {
        List<Person> personList = getTestList();
        personList.sort(Comparator.comparing(Person::getName, String.CASE_INSENSITIVE_ORDER)
                .thenComparing(Person::getGid, (a, b) -> b.compareTo(a))
                .thenComparingInt(Person::getAge));
        personList.stream().forEach(System.out::println);
    }
    public static List<Person> getTestList() {
        return Lists.newArrayList(new Person("dai", "301", 10), new Person("dai", "303", 10),
                new Person("dai", "303", 8), new Person("dai", "303", 6), new Person("dai", "303", 11),
                new Person("dai", "302", 9), new Person("zhang", "302", 9), new Person("zhang", "301", 9),
                new Person("Li", "301", 8));
    }
}

输出结果:

Person(name=dai, gid=303, age=6)
Person(name=dai, gid=303, age=8)
Person(name=dai, gid=303, age=10)
Person(name=dai, gid=303, age=11)
Person(name=dai, gid=302, age=9)
Person(name=dai, gid=301, age=10)
Person(name=Li, gid=301, age=8)
Person(name=zhang, gid=302, age=9)
Person(name=zhang, gid=301, age=9)

对Stream中的元素进行排序:reversed():倒序

String[] array = { "c", "c", "a", "b", "b", "e", "e", "d", "d"};
List<String> newList = Arrays.stream(array).sorted().collect(Collectors.toList());
List<Student> students = new ArrayList<>();
students.add(new Student("Mike", 10, "male", 88));
students.add(new Student("Jack", 13,"male", 90));
students.add(new Student("Lucy", 15,"female", 100));
students.add(new Student("Jessie", 12,"female", 78));
students.add(new Student("Allon", 16,"female", 92));
students.add(new Student("Alis", 22,"female", 50));
//正序
List<String> nameList = students.stream()
    .sorted(Comparator.comparing(Student::getScore))
    .map(Student::getName)
    .collect(Collectors.toList());
System.out.println("按成绩排序输出学生姓名:" + nameList);
//倒序
List<String> nameList2 = students.stream()
    .sorted(Comparator.comparing(Student::getScore).reversed())
    .map(Student::getName)
    .collect(Collectors.toList());
System.out.println("按成绩排序输出学生姓名:" + nameList2);
//按成绩排序输出学生姓名:[Alis, Jessie, Mike, Jack, Allon, Lucy]
//按成绩排序输出学生姓名:[Lucy, Allon, Jack, Mike, Jessie, Alis]
正序:
list=list.stream().sorted().collect(Collectors.toList());
或者
list.stream().sorted(Comparator.comparing(Student::getAge)) ;
倒序:
list.stream().sorted(Comparator.comparing(Student::getAge)) ;
list.stream().sorted(Comparator.comparing(Student::getAge).reversed());
//含空值的正序(升序)排序(按创建时间排序) nullsFirst:空值放第一位
list=list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsFirst(Date::compareTo))).collect(Collectors.toList());
//nullsLast:空值放最后
list=list.stream().sorted(Comparator.comparing(l -> l.getCreateTime(), Comparator.nullsLast(Date::compareTo).reversed())).collect(Collectors.toList());
目录
相关文章
|
4月前
|
Java
Java中的equals()与==的区别与用法
【7月更文挑战第28天】
69 12
|
27天前
|
存储 安全 Java
深入理解Java中的FutureTask:用法和原理
【10月更文挑战第28天】`FutureTask` 是 Java 中 `java.util.concurrent` 包下的一个类,实现了 `RunnableFuture` 接口,支持异步计算和结果获取。它可以作为 `Runnable` 被线程执行,同时通过 `Future` 接口获取计算结果。`FutureTask` 可以基于 `Callable` 或 `Runnable` 创建,常用于多线程环境中执行耗时任务,避免阻塞主线程。任务结果可通过 `get` 方法获取,支持阻塞和非阻塞方式。内部使用 AQS 实现同步机制,确保线程安全。
|
29天前
|
Java 大数据 API
别死脑筋,赶紧学起来!Java之Steam() API 常用方法使用,让开发简单起来!
分享Java Stream API的常用方法,让开发更简单。涵盖filter、map、sorted等操作,提高代码效率与可读性。关注公众号,了解更多技术内容。
|
1月前
|
存储 搜索推荐 算法
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
【用Java学习数据结构系列】七大排序要悄咪咪的学(直接插入,希尔,归并,选择,堆排,冒泡,快排)以及计数排序(非比较排序)
23 1
|
2月前
|
Java
Java 正则表达式高级用法
Java 中的正则表达式是强大的文本处理工具,用于搜索、匹配、替换和分割字符串。`java.util.regex` 包提供了 `Pattern` 和 `Matcher` 类来高效处理正则表达式。本文介绍了高级用法,包括使用 `Pattern` 和 `Matcher` 进行匹配、断言(如正向和负向前瞻/后顾)、捕获组与命名组、替换操作、分割字符串、修饰符(如忽略大小写和多行模式)及 Unicode 支持。通过这些功能,可以高效地处理复杂文本数据。
|
2月前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
|
2月前
|
安全 Java
Java switch case隐藏用法
在 Java 中,`switch` 语句是一种多分支选择结构,常用于根据变量值执行不同代码块。除基本用法外,它还有多种进阶技巧,如使用字符串(Java 7 开始支持)、多个 `case` 共享代码块、不使用 `break` 实现 “fall-through”、使用枚举类型、使用表达式(Java 12 及以上)、组合条件以及使用标签等。这些技巧使代码更加简洁、清晰且高效。
|
3月前
|
Java API
|
4月前
|
Java API 存储
Java如何对List进行排序?
【7月更文挑战第26天】
216 9
Java如何对List进行排序?
|
3月前
|
存储 Java
Java中ArrayList 元素的排序
本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
下一篇
无影云桌面