stream的基本操作
测试类属性
Test
private String name;
private Integer age;
private int id;
怎么得到流
通过集合中提供的stream方法或parallelStream
List list=new ArrayList<>();
list.stream()
通过Arrays数组中的静态方法stream(对象)
String [] a={"1","2","4"};
Arrays.stream(a);
通过Stream的静态方法of()
Stream.of("2","2","4");
无限流(创建)
Stream stream =Stream.iterate(2,(x)->x+1);
中间操作
filter 一般接受lambda表达式,用来过滤一些元素
limit(n) 取元素的前n个,一旦有了n个,就不再执行后面的
skip(n) 跳过n个 与limit相反
distinct 去重,但如果元素是自定义对象应该重写hashcode()和equals
list.stream().filter((x)->x.getAge()>22)//过滤年龄大于22的
.limit(3)//找到3条就停止
.skip(1)//再跳过第一条
.distinct()//去除相同的,如果是对象要先重写hashcode和equals方法
.forEach(System.out::println);//遍历
map()接受lambda表达式,用于让每一个元素都执行表达式里面的操作
list.stream()
.map(x->{
x.setAge(x.getAge()+1);
return x;
}) //将每一个元素的年龄+1
.forEach(System.out::println);
flatmap 简化map在流的嵌套问题,他可以把流里面的元素单独放到一个流中,一般用于简化输出代码
Stream stream1=Stream.of("zhj","zz","hhh");
stream1.flatMap(Test::getChar)
.forEach(System.out::println);
public static Stream getChar(String string){
List list=new ArrayList<>();
for (Character o : string.toCharArray() ) {
list.add(o);
}
return list.stream();
}
sorted (Comparable)默认的compareto方法
sorted(Comparator com)-定制排序
list.stream().sorted((x1,x2)->{
if (x1.getAge().equals(x2.getAge())){
return x1.getName().compareTo(x2.getName());
}else {
return x1.getAge().compareTo(x2.getAge());
}})
.forEach(System.out::println);
终止操作
allMatch 所有元素是否满足匹配的条件,是则返回true,否则返回false
boolean is=list.stream().allMatch(x->x.getAge().equals(23));
System.out.println(is);
anyMatch 任一个元素满足匹配条件就返回true否则false
is=list.stream().anyMatch(x->x.getAge().equals(23));
System.out.println(is);
noneMatch 所有都不满足匹配条件返回true否则false
is=list.stream().noneMatch(x->x.getAge().equals(23));
System.out.println(is);
findFirst 返回流中中第一个元素 ,这里可能为空
Optional x=list.stream().findFirst();
System.out.println("sss"+x.get());
findAny 返回流中任意一个元素
Optional x1=list.stream().findAny();
System.out.println("xxx"+x1.get());
count 统计当前流中元素个数
long c=list.stream().count();System.out.println(c);
max 按指定的匹配规则找出最大的一个元素
Optional x3= list.stream()
.max(
(n1,n2)>n1.getAge().compareTo(n2.getAge()));
System.out.println(x3.get());
min 按指定的匹配规则找出最小的一个元素
reduce 按指定的算术运算执行
Optional o=list.stream().map(p->p.getAge())
.reduce((n1,n2)-> (n1+n2));
System.out.println(o.get());
collect 一般配合 collectors 将元素收集到一个集合中或其他
List list1=list.stream().map(z->z.getName())
.collect(Collectors.toList());