Stream流的基本操作

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

你可能感兴趣的:(Stream流的基本操作)