共计 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 网 – 提供最优质的资源集合!
正文完