1、获取流
2、中间操作 流的链式操作
filter distinct skip limit
map flatmap
3、终端操作
allmatch anymatch nonematch findfirst
reduce sum count
collect
Collectors count max sum min max partition group
package gcdemo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@Data
@Accessors(chain = true)
@AllArgsConstructor
public class User {
private int id;
private String userName;
private int age;
private int money;
public static void main(String[] args) {
User a = new User(11, "apple", 23,100);
User b = new User(12,"balance",23,120);
User c = new User(13,"control",22,300);
User d = new User(14,"double",28,300);
User e = new User(15,"effect",26,400);
User f = new User(15,"effect",26,400);
//todo 1、中间操作
List<User> users = Arrays.asList(a, b, c, d, e,f);
//1.1、过滤操作
//filter 筛选id为偶数的人
System.out.println(users.stream().filter(t -> {
return t.id % 2 == 0;
}).collect(Collectors.toList()));
//distinct去重 根据equals方法去重
System.out.println(users.stream().distinct().collect(Collectors.toList()));
//limit 返回前n个元素
System.out.println(users.stream().limit(2).collect(Collectors.toList()));
//skip 跳过n个元素
System.out.println(users.stream().skip(2).collect(Collectors.toList()));
//1.2、映射
//map 返回所有用户姓名
System.out.println(users.stream().map(t -> {
return t.userName;
}).collect(Collectors.toList()));
//flatmap 对用户名字母去重
System.out.println(users.stream().map(t -> {
return t.userName.split("");
}).flatMap(Arrays::stream).distinct().collect(Collectors.toList()));
//todo 2、终端操作
//查找
//allMatch 是否所有人年满18岁
System.out.println(users.stream().allMatch(i->{
return i.getAge()>18;
}));
//anyMatch 任意满足 年龄==22
System.out.println(users.stream().anyMatch(i->{
return i.getAge()==22;
}));
//noneMatch 不存在满足
System.out.println(users.stream().noneMatch(i->{
return i.getAge()>18;
}));
//findFirst 查询满足条件的第一个 findAny返回任意一个 并行流式处理中性能比findFirst好一点
System.out.println(users.stream().findFirst());
//规约
//sum 对用户钱求和
System.out.println(users.stream().mapToInt(t->{return t.money;}).sum());
System.out.println(users.stream().mapToInt(t->{return t.money;}).reduce(Integer::sum));
//收集之规约
System.out.println(users.stream().count());
System.out.println(users.stream().collect(Collectors.counting()));
//年龄最大的人
System.out.println(users.stream().collect(Collectors.maxBy((s1,s2)->{
return s1.getAge()-s2.getAge();
})));
//年龄之和
System.out.println(users.stream().collect(Collectors.summingInt(s->{return s.getAge();})));
//年龄的均值
System.out.println(users.stream().collect(Collectors.averagingInt(s->{return s.getAge();})));
//分析 IntSummaryStatistics{count=6, sum=149, min=22, average=24.833333, max=28}
System.out.println(users.stream().collect(Collectors.summarizingInt(s->{return s.getAge();})));
//字符串拼接
System.out.println(users.stream().map(i->{return i.getUserName();}).
collect(Collectors.joining("-")));
//收集之分组
//按年龄分组
System.out.println(users.stream().
collect(Collectors.groupingBy(User::getAge)));
//按年龄分组 再按钱分组
System.out.println(users.stream().
collect(Collectors.groupingBy(User::getAge,Collectors.groupingBy(User::getMoney))));
//分区 年龄分界
System.out.println(users.stream().
collect(Collectors.partitioningBy(t->{
return t.getAge()>23;
})));
}
}