Java:Stream流主要用法

Java:Stream流主要用法,第1张

文章目录
  • stream流简介
  • 一、为什么要使用流?
  • 二、主要用法
    • 1.forech
    • 2.filter
    • 3.map
  • 小结


stream流简介

stream流 *** 作是Java 8新添加的一个重要特性,它支持顺序和并行聚合 *** 作的元素序列。在java提供的api中举了这样一个例子:widgets是我们定义的一个集合Collection< Widget >。我们可以通过Collection.stream()创建一个Widget对象流,对其进行过滤以生成一个仅包含红色小部件的流,然后将其转换为一个表示每个红色小部件权重的int值流。最后求和,得到总重量。

int sum = widgets.stream()
				.filter(w -> w.getColor() == RED)
                .mapToInt(w -> w.getWeight())
                .sum();

一、为什么要使用流?

对于面的例子,我们不使用stream流,遍历一遍widgets集合也可以计算红色部件的总重量,为什么偏偏要用它呢。遍历很明显的一个缺点就是:对于不同的 *** 作(例如筛选红色部件与求和 *** 作),我们都要遍历一遍集合。然而使用stream流就可以高效简洁地处理这个问题。
流不提供直接访问或 *** 作其元素的方法,而是关注于声明性地描述它们的源和将在该源上聚合执行的计算 *** 作。简单点说就是我们可以使用流提供的方法来优雅地处理集合元素。

二、主要用法

stream流的方法有很多,依据是否可以在流过程中执行分为中间 *** 作(intermediate operation)和终端 *** 作(terminal operation),这里只介绍一些常见用法。

1.forech

对流中的每个元素执行一个 *** 作,属于终端 *** 作。

void forEach(Consumer<? super T> action)

举个例子:现有一个User类,包含id(long型),userName以及sex属性。想通过stream流的方式打印输出每个userName值。

public class myStream {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        users.add(new User(001,"小明","男"));
        users.add(new User(002,"小李","男"));
        users.add(new User(003,"晓丽","女"));
        users.add(new User(004,"小花","女"));
        users.stream().forEach( user-> System.out.println(user.userName));
    }
}
2.filter

筛选出符合lambda表达式的集合元素,以流的形式返回,属于中间 *** 作。

Stream<T> filter(Predicate<? super T> predicate)

举例:还是刚才的那个例子,现在想通过stream流筛选出性别为女的用户,然后打印输出这些用户的姓名。

users.stream().filter( s-> s.sex == "女").forEach( s-> System.out.println(s.userName));
3.map

返回一个流,其中包含将给定函数应用于该流中的元素的结果,属于中间 *** 作。

<R> Stream<R> map(Function<? super T,? extends R> mapper)

举个例子:有一个String类型的list,并添加一些元素,代码如下,现想将list中每个元素的字母部分去掉,并保存到集合中。
代码如下:

List<String> list = new ArrayList<>();
        list.add("aa111");
        list.add("bb222");
        list.add("cc333");
        list.add("dd444");
        
        list = list.stream().map((item) -> {
            item = item.substring(2);
            return item;
        }).collect(Collectors.toList());

小结

集合和流虽然表面上有一些相似之处,但目标不同。集合主要涉及对其元素的有效管理和访问。
时间关系,今天先总结到这里,后续会加一些方法进来,如有错误,还望指正。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/905611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存