【Java 8 新特性】Java Stream通过count()获取流数据元素总数

102 篇文章 72 订阅

本页将遍历Stream.count()方法示例。count()方法返回此流中元素的总数。

count()方法是获取流总数简写的方法。

在javadoc中count()方法声明。

long count() 

返回count()返回此流中元素的总数。

count()是流终端操作(stream terminal operation)。

流操作(stream operations)分为中间操作(intermediate operation)和终端操作(terminal operation),并结合起来形成流管道(stream pipelines)。

中间操作是惰性操作,如filter()方法,它们实际上不执行任何过滤,而是创建一个新的流,在遍历初始流时,它们只包含与给定谓词匹配的元素。

只有在执行诸如count()之类的终端操作时,才会遍历管道流。

示例1:下面是数字类型的列表

List<Integer> numList = Arrays.asList(42, 44, 43, 41); 

下面count()方法的作用是:返回流中元素的总数

long c = numList.stream().count(); 

c的值是4。

现在让我们对流使用filter方法,然后对元素进行计算总数。

long c = numList.stream().filter(e -> e % 2 == 0).count(); 

c的值是2。

count()是获取流总数简写的方法。
下面是不使用count()方法获取总数的代码。

long c = numList.stream().mapToLong(e -> 1L).sum(); 

c的值是4。

示例2:下面是名单列表

List<String> strList = Arrays.asList("Mohit", "Nilesh", "Mahesh"); 

让我们在列表流中使用count()

long c = strList.stream().count(); 

c的值是3。

现在对字符串流使用过滤器并对其进行计数。

long c = strList.stream().filter(e -> e.startsWith("M")).count()

c的值是2。

众所周知,count()是获取流总数简写的方法。让我们不使用count()方法来计算计数。

long c = strList.stream().filter(e -> e.startsWith("M")).mapToLong(e -> 1L).sum(); 

c的值是2。

示例3:在这个例子中,我们有一个对象列表。我们将根据给定的条件过滤列表流,然后对元素进行计数。

CountDemo.java

package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class CountDemo {
  public static void main(String[] args) {
	List<User> users = Arrays.asList(
		new User("Vikas", 30),
		new User("Krishna", 29),
		new User("Virat", 30),
		new User("Mahesh", 30)
	);
	long c1 = users.stream().filter(u -> u.getUserName().startsWith("V")).count();
        System.out.println(c1); //Output: 2
    
	long c2 = users.stream().filter(u -> u.getAge() == 30).count();
        System.out.println(c2); //Output: 3
  }
}
class User {
  private String userName;
  private int age;
  public User(String userName, int age) {
	this.userName = userName;
	this.age = age;
  }
  //Sets and Gets
} 

输出

2
3 

参考文献

【1】Java doc: Stream
【2】Java Stream count()

  • 9
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫巳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值