java8新特性-stream常用方法
- 创建对象及示例集合
@Data
@AllArgsConstructor
public class User {
private Integer age;
private String userName;
private Double height;
private Double weight;
private String className;
}
List<User> userList = new ArrayList<>();
User user1 = new User(15,"zhangsan1",175.5,130.0,"1班");
User user2 = new User(16,"zhangsan2",174.5,131.0,"2班");
User user3 = new User(19,"zhangsan3",173.5,132.0,"1班");
User user4 = new User(18,"zhangsan4",172.5,133.0,"1班");
User user5 = new User(19,"zhangsan5",171.5,134.0,"3班");
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
userList.add(user5);
- 方法
1.map方法
需求:取出上述userList中user的age属性集合
List<Integer> ageList = userList.stream().map(User::getAge).collect(Collectors.toList());
System.out.println("筛选user对象集合中的年龄"+ageList);
打印结果:
筛选user对象集合中的年龄[15, 16, 19, 18, 19]
- sort排序
需求:根据user的身高将上述userList进行排序
List<Integer> ageList2 = userList.stream().map(User::getAge)
.sorted(Comparator.comparing(Integer::intValue)).collect(Collectors.toList());
List<Integer> ageList3=userList.stream().map(User::getAge)
.sorted(Comparator.comparing(Integer::intValue).reversed()).collect(Collectors.toList());
System.out.println("根据user的身高进行排序,升序"+userList1);
System.out.println("根据user的身高进行排序,降序"+userList2);
打印结果:
筛选user对象集合中的年龄,升序[15, 16, 18, 19, 19]
筛选user对象集合中的年龄,降序[19, 19, 18, 16, 15]
- filter过滤筛选
需求:查询出userList中年龄大于18的user
List<User> filterAgeList = userList.stream()
.filter(user -> user.getAge() > 18).collect(Collectors.toList());
System.out.println("查询出user集合中年龄大于18的"+filterAgeList);
打印结果:
查询出user集合中年龄大于18:
[User(age=19, userName=zhangsan3, height=173.5, weight=132.0, className=1班),
User(age=19, userName=zhangsan5, height=171.5, weight=134.0, className=3班)]
- mapToInt聚合
需求:获取userList中所有人年龄总和
int ageSum = userList.stream().mapToInt(User::getAge).sum();
System.out.println("获取user集合所有人的年龄总和"+ageSum);
打印结果:
获取user集合所有人的年龄总和:87
- groupingBy分组
需求:根据班级分组
Map<String, List<User>> classNameGroupList = userList.stream()
.collect(Collectors.groupingBy(User::getClassName));
System.out.println("根据班级分组"+classNameGroupList);
打印结果:
根据班级分组:
{3班=[User(age=19, userName=zhangsan5, height=171.5, weight=134.0, className=3班)],
2班=[User(age=16, userName=zhangsan2, height=174.5, weight=131.0, className=2班)],
1班=[User(age=15, userName=zhangsan1, height=175.5, weight=130.0, className=1班),
User(age=19, userName=zhangsan3, height=173.5, weight=132.0, className=1班),
User(age=18, userName=zhangsan4, height=172.5, weight=133.0, className=1班)]}
备注:
java8的stream流方法是链式,方法可直接链式调用。