在Java中可以使用StreamAPI来分组、排序和取第一个值
在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}}
版权声明
本文仅代表作者观点,不代表博信信息网立场。