Java Stream使用

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());