Java Stream使用
- Java
- 17天前
- 28热度
- 0评论
Stream 可以对集合或数组数据进行快速地操作,有如下几个特点:
- Stream 自己不会存储元素。
- Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
- 当一个流执行完终止操作后将不能再被使用。
- Stream 操作是延迟执行的,会等到需要结果的时候才执行。
1、对数据操作
1.1、filter() 过滤
筛选出年龄大于3
userList.stream()
.filter(obj -> obj.age > 3)
.forEach(System.out::println);
1.2、limit() 截取操作
取前2条数据
userList.stream()
.limit(2)
.forEach(System.out::println);
1.3、skip() 元素跳过操作
跳过前2条,实际获取第3、4条数据
userList.stream()
.skip(2)
.limit(2)
.forEach(System.out::println);
1.4、distinct() 去重操作
去除重复元素
userList.stream()
.distinct()
.forEach(System.out::println);
1.5、sorted() 排序操作
根据年龄排序,升序
userList.stream()
.sorted((o1, o2) -> o1.getAge() - o2.getAge())
.forEach(System.out::println);
1.6、map() 对流中元素进行操作
数值转换,去重,排序
userList.stream()
.map(o -> Integer.parseInt(o.getAge)).distinct().sorted()
.forEach(System.out::println);
2、返回值
2.1、返回 List
抽取某个属性
List<String> userNameList = userList.stream()
.map(User::getName)
.collect(Collectors.toList());
2.2、返回 Map
根据年龄分组
List<String> userNameList = userList.stream()
.collect(Collectors.groupingBy(user::getAge));
实用例子
对象列表中抽取一个属性
List<String> userNameList = userList.stream()
.map(User::getName)
.filter(Objects::nonNull)
.collect(Collectors.toList());