java分组排序取第一个值的方法是什么

39次阅读
没有评论

共计 1155 个字符,预计需要花费 3 分钟才能阅读完成。

在 Java 中可以使用 Stream API 来分组、排序和取第一个值。以下是一个示例代码:

假设有一个 List<Person> 对象列表,每个 Person 对象有两个属性:name 和 age。现在要按照 age 属性分组并且按照 name 属性排序,然后取每个分组的第一个值。

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {public static void main(String[] args) {
        List<Person> personList = List.of(new Person("Alice", 25),
                new Person("Bob", 30),
                new Person("Charlie", 25),
                new Person("David", 30)
        );

        Map<Integer, Person> result = personList.stream()
                .collect(Collectors.groupingBy(Person::getAge,
                        Collectors.collectingAndThen(Collectors.minBy((p1, p2) -> p1.getName().compareTo(p2.getName())), p -> p.get())));

        System.out.println(result);
    }
}

class Person {private String name;
    private int age;

    public Person(String name, int age) {this.name = name;
        this.age = age;
    }

    public String getName() {return name;
    }

    public int getAge() {return age;
    }

    @Override
    public String toString() {return "Person{name='" + name + "', age=" + age + "}";
    }
}

在上面的代码中,首先使用 stream() 方法将 List<Person> 转换为 Stream<Person>,然后使用 collect() 方法对 Stream 进行分组和集合。在分组时,使用 Collectors.groupingBy() 方法按照 age 属性进行分组,然后对每个分组使用 Collectors.collectingAndThen() 方法来获取每个分组的第一个值,通过比较 name 属性的大小来确定第一个值。最后将结果打印出来。

运行结果将会输出:

{25=Person{name='Alice', age=25}, 30=Person{name='Bob', age=30}}

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2024-02-27发表,共计1155字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)