假设你有一个业务需求,要求筛选出年龄大于等于60的用户,然后将他们按照年龄从大到小排序并将他们的名字放在 List 中返回。
// 非Stream实现
public List<String> collect(List<User> users) {
List<User> userList = new ArrayList<>();
// 筛选出年龄大于等于 60 的用户
for (User user : users)
if (user.age >= 60)
userList.add(user);
// 将他们的年龄从大到小排序
userList.sort(Comparator.comparing(User::getAge).reversed());
List<String> result = new ArrayList<>();
for (User user : userList)
result.add(user.name);
return result;
}
<R, A> R collect(Collector<? super T, A, R> collector);
public interface Collector<T, A, R> {
Supplier<A> supplier();
BiConsumer<A, T> accumulator();
BinaryOperator<A> combiner();
Function<A, R> finisher();
Set<Characteristics> characteristics();
}