package com.ai.apac.userservice.server;
import com.ai.apac.userservice.data.User;
import lombok.extern.slf4j.Slf4j;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class UserService {
public static void main(String[] args) {
User user0 = new User(1L,"bbb","bbb");
User user1 = new User(1L,"aaa","bbb");
User user2 = new User(2L,"bbb","bbb");
User user3 = new User(3L,"ccc","bbb");
User user4 = new User(4L,"ccc","bbb");
User user5 = new User(5L,"ccc","bbb");
List<User> userList = new ArrayList<>();
userList.add(user0);
userList.add(user1);
userList.add(user4);
userList.add(user5);
userList.add(user5);
userList.add(user2);
userList.add(user3);
if (user0.getId().compareTo(user5.getId()) == 0) {
System.out.println("aaa");
}
log.debug("\n size={},\n userList = {}",userList.size(),userList.toString());
//1、筛选与切片
//filter:过滤流中的某些元素
List<User> useFilter = userList.stream().filter(user -> user.getUsername().equals("aaa")).collect(Collectors.toList());
log.debug("useFilter :\n size={},\n useFilter = {}",useFilter.size(),useFilter.toString());
//limit(n):获取n个元素
List<User> useLimit = userList.stream().filter(user -> user.getUsername().equals("aaa")).limit(1).collect(Collectors.toList());
log.debug("useFilter :\n size={},\n useLimit = {}",useLimit.size(),useLimit.toString());
//skip(n):跳过n元素,配合limit(n)可实现分页
List<User> useSkip = userList.stream().skip(2L).limit(3).collect(Collectors.toList());
log.debug("useFilter :\n size={},\n useLimit = {}",useSkip.size(),useSkip.toString());
//distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
List<User> userDistinct = userList.stream().distinct().collect(Collectors.toList());
log.debug("useFilter :\n size={},\n useLimit = {}",userDistinct.size(),userDistinct.toString());
//按照id排序
List<User> userSort = userList.stream().sorted((o1,o2)->o1.getId().compareTo(o2.getId())).collect(Collectors.toList());
log.debug("usersort =",userSort);
//按照id排序,如果id相同按照名称排序
List<User> userSort2 = userList.stream().sorted((o1,o2)->{
if (0 !=o1.getId().compareTo(o2.getId())) {
return o1.getId().compareTo(o2.getId());
}else {
return o1.getUsername().compareTo(o2.getUsername());
}
}).collect(Collectors.toList());
log.debug("usersort =",userSort2);
//获取id中最大,最小,总数
LongSummaryStatistics intSummaryStatistics = userList.stream().mapToLong(User::getId).summaryStatistics();
System.out.println(intSummaryStatistics.getMin());
System.out.println(intSummaryStatistics.getMax());
System.out.println(intSummaryStatistics.getCount());
}
}
List Stream常用方法总结
最新推荐文章于 2024-07-20 12:43:53 发布
本文演示了Java8 Stream API的使用,包括filter、limit、skip、distinct等操作,以及排序和统计方法。示例代码展示了如何筛选、切片、去重、排序用户列表,并获取ID的最小值、最大值和总数。
1116

被折叠的 条评论
为什么被折叠?



