概述
平时工作用python的机会比较多,习惯了python函数式编程的简洁和优雅。切换到java后,对于数据处理的『冗长代码』还是有点不习惯的。有幸的是,Java8版本后,引入了Lambda表达式和流的新特性,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读。幸福感爆棚,有没有!
本文主要列举一些stream的使用例子,并附上相应代码。
实例
先准备测试用的数据,这里简单声明了一个Person
类,有名称和年龄两个属性,采用 lombok 注解方式节省了一些模板是的代码,让代码更加简洁。
@Data
@AllArgsConstructor
@NoArgsConstructor
private static class Person {
private String name;
private Integer age;
}
private List<Person> initPersonList() {
return Lists.newArrayList(new Person("Tom", 18),
new Person("Ben", 22),
new Person("Jack", 16),
new Person("Hope", 4),
new Person("Jane", 19),
new Person("Hope", 16));
}
filter
说明
- 遍历数据并检查其中的元素是否符合要求,不符合要求的过滤掉
- filter接受一个函数作为参数(Predicate),该函数用Lambda表达式表示,返回true or false,返回false的数据会被过滤
示例图
数据集合过Predicate方法,留下返回true的数据集合
代码
@Test
public void filterTest() {
List<Person> personList = initPersonList();
// 过滤出年龄大于8的数据
List<Person> result = personList.stream().filter(x -> x.getAge() > 18).collect(Collectors.toList());
log.info(JsonUtils.toJson(result));
// filter 链式调用实现 and
result =
personList.stream()