java 排序

时间:2025-03-14 08:38:19

概述

用stream流根据实体的某个属性对列表进行排序
假设有一个实体类 Person,包含两个属性 name 和 age,你可以使用 stream 流的 sorted() 方法来按照某两个字段进行排序。以下是一个示例代码:

List<Person> personList = new ArrayList<>();
// 填充 personList

List<Person> sortedList = personList.stream()
    .sorted(Comparator.comparing(Person::getName).thenComparing(Person::getAge))
    .collect(Collectors.toList());

sortedList.forEach(System.out::println);

在上述代码中,我们将 personList 转换成流后,调用了 sorted() 方法,并且使用 Comparator 的 comparing() 和 thenComparing() 方法来指定先按照 name 字段排序,再按照 age 字段排序。

最后,我们收集结果并将其存储在一个新列表 sortedList 中,然后打印出每个人的信息。

当然,这只是一个示例。你需要根据具体的需求和实体类的情况来修改代码。

        Map<String, ArrayList<String>> temp = list.stream()
                .collect(Collectors.groupingBy(TenantProjectUserDTO::getTenantCode,
                        Collectors.collectingAndThen(
                                Collectors.mapping(TenantProjectUserDTO::getProjectCode,
                                        Collectors.toSet()),
                                ArrayList::new)));

		Map<String, ArrayList<String>> temp = list.stream()
		                .collect(Collectors.groupingBy(TenantProjectUserDTO::getTenantCode,
		                        Collectors.collectingAndThen(
		                                Collectors.mapping(TenantProjectUserDTO::getProjectCode,
		                                        Collectors.toCollection(TreeSet::new)),
		                                ArrayList::new)));

根据固定列表的元素顺序排序

PORTAL_ORDER是一个列表

        res.sort(((o1, o2) -> {
            int i1 = PORTAL_ORDER.indexOf(o1.getName());
            int i2 = PORTAL_ORDER.indexOf(o2.getName());

            i1 = i1 == -1? Integer.MAX_VALUE: i1;
            i2 = i2 == -1? Integer.MAX_VALUE: i2;

            return i1-i2;
        }));