学堂 学堂 学堂公众号手机端

在Java中可以使用StreamAPI来分组、排序和取第一个值

lewis 1年前 (2024-03-10) 阅读数 2 #技术

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

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

importjava.util.List; importjava.util.Map; importjava.util.stream.Collectors; publicclassMain{ publicstaticvoidmain(String[]args){ List<Person>personList=List.of( newPerson("Alice",25), newPerson("Bob",30), newPerson("Charlie",25), newPerson("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); } } classPerson{ privateStringname; privateintage; publicPerson(Stringname,intage){ this.name=name; this.age=age; } publicStringgetName(){ returnname; } publicintgetAge(){ returnage; } @Override publicStringtoString(){ 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}}
版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门