常用的Stream API

2018-02-04  本文已影响0人  柚子过来

中间操作:返回一个新的stream

操作 描述 操作参数 函数描述符
filter 过滤元素 Predicate<T> T->boolean
map 对流元素操作生成一个新元素组成的流 Function<T,R> T->R
flatMap 对流每个元素本身就是一个流,那该操作将所有流合并到一起
limit 截取前n个元素
skip 丢弃前n个元素
sorted 排序 Comparator<T> (T,T)->int
distinct 去重



终端操作:结束并返回结果

操作 描述
forEach 遍历流中的每一个元素,并根据lamba消费它
count 返回流中元素的个数
collect 将流中元素归约为一个集合并返回,如List,Map
anyMatch/allMatch/noneMatch 返回boolean。Predicate<T>,T->boolean
findAny/findFirst 返回Optional<T>
reduce 从一组值中生成一个值,需要给定一个初始值,然后它会根据lamba无限迭代操作



举个使用StreamAPI的例子:
从一个唱片集albums(一个albums里面有很多tracks)里面找出长度大于一分钟的歌曲放入结果Set中。

以前的写法:

public Set<String> findLongTrcks(List<Album> albumList) {
    Set<String> result = new HashSet<>();
    for (Album album: albumList) {
        for(Track track:album.getTrackLists()) {
            if(track.getLength()>60) {
                result.add(track.getName());
            }
        }
    }
    return result;
}

使用Stream的写法:

 public Set<String> findLongTrcks(List<Album> albumList) {
    
    return albumList.stream()
            .flatMap(Album->Album.getTrackLists())
            .filter(track->track.getLength>60)
            .map(track->track.getName())
            .collect(Collectors.toSet());
}
上一篇下一篇

猜你喜欢

热点阅读