什么是Stream流式计算?
在如今大数据时代,数据的操作以存储
、计算
为主,像我们所学的集合、MySQL本质都是为了存储数据;而真正的计算,我们就应该交给流来完成。
案例分析:
题目要求:只用一行代码实现
现在有五个用户,筛选:
1、ID必须为偶数;
2、年龄必须大于23岁;
3、用户名转为大写字母;
4、用户名字母倒序;
5、只输出一个用户;
public class Demo {
public static void main(String[] args) {
User u1 = new User(1,"a",21);
User u2 = new User(2,"b",22);
User u3 = new User(3,"c",23);
User u4 = new User(4,"d",24);
User u5 = new User(6,"e",25);
//集合就是存储
List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
//计算交给Stream流
list.stream()
//用断定型函数去判断id是否为偶数
.filter((user)->{return user.getId()%2==0;})
//用断定型函数去判断年龄是否大于23
.filter((user)->{return user.getAge()>23?true:false;})
//用函数型接口将用户名传入,接收返回后都为大写的用户名
.map((user)->{return user.getName().toUpperCase();})
//用比较器进行排序
.sorted((user1,user2)->{return user1.compareTo(user2);})
//分页
.limit(1)
//循环打印
.forEach(System.out::println);
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class User{
private int id;
private String name;
private int age;
}
filter | Stream filter(Predicate<? super T> predicate),接收的是一个断定型函数式接口 |
---|---|
map | Stream map(Function<? super T,? extends R> mapper),接收的是一个函数型接口 |
sorted | Stream sorted(Comparator<? super T> comparator),接收的式一个比较器 |
limit | 分页操作 |