JAVA Stream流

 

Stream 流的三类方法

获取Stream 流

 创建一条流水线,并把数据放到流水线上准备操作

中间方法

流水线上的操作

一次操作完毕之后,还可以继续进行其他操作

终结方法

一个Stream流只能有一个终结方法

是流水线上的最后一个操作

单列集合:集合对象.stream();

双列集合:不能直接获取,需要间接获取 

集合对象.keySet().stream() 获取键的集合的Stream流

集合对象.entrySet().stream 获取键值对的集合 的Stream流

数组: Arrays.stream(数组名);

同种数据类型的多个数据:stream.of(数据1,数据2,数据3.......)

 中间方法

1  .filter()  获取流中的每一个数据,test方法中的s就以此表示流中的每一个数据,只要在test方法中对s进行判断就可以了

list.stream().filter()

HashMap<String,String> map =new HashMap<>();
map.put("张三","浙江");
map.put("李四","四川");
map.put("王五","福建");
map.put("张飞","福建");

map.keySet().stream().filter(new Predicate<String>() {
    @Override
    public boolean test(String s) {
        return s.startsWith("张");//判断是否以张开头 如果是true则留下
    }
}).forEach(s-> System.out.println(s+map.get(s)));  //打印所有姓张的键跟对应的值

而Predicate接口只有一个test抽象方法所以 可以用简略版lambda表达式:

map.keySet().stream().filter(s -> s.startsWith("张")).forEach(System.out::println);

Stream<T> limit​(long maxSize):截取指定参数个数的数据

Stream<T> skip​(long n):跳过指定参数个数的数据

static <T> Stream<T> concat​(Stream a, Stream b):合并a和b两个流为一个流

Stream<T> distinct​():去除流中重复的元素。依赖(hashCode和equals方法)

终结操作方法

forEach() 对此流的每个元素执行操作

void forEach​(Consumer action):对此流的每个元素执行操作 Consumer接口中的方法    void accept​(T t):对给定的参数执行此操作

底层是循环获取流中的每个数据,并循环调用accept方法,并把每一个数据传递给accept方法,s就代表了流中的每个数据

可以用Lambda表达式简写

list.stream().forEach(s -> System.out.println(s))

long count​():返回此流中的元素数

Stream流中无法直接修改集合,数组等数据源中的数据

Stream流的收集操作 ,在用stream流的方式操作完之后,我想把流中数据存起来 该怎么办?

Stream流的收集方法 R collect​(Collector collector)

工具类Collectors提供了具体的收集方式

public static <T> Collector toList​():把元素收集到List集合中

public static <T> Collector toSet​():把元素收集到Set集合中

public static  Collector toMap​(Function keyMapper,Function valueMapper):把元素收集到Map集合中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值