使用Java8流计算列表中的对象数

使用Java8流计算列表中的对象数,java,java-8,java-stream,Java,Java 8,Java Stream,因此,我尝试使用just Stream计算ArrayList中的对象数。 我正在使用stream.count,但这只是返回1,因为我的列表中有多个对象。下面是一些代码: static ArrayList<Person> people = new ArrayList<>(); void loadCourses(){ // putting Person objects in the list } public void countPeople() { S

因此,我尝试使用just Stream计算ArrayList中的对象数。 我正在使用stream.count,但这只是返回1,因为我的列表中有多个对象。下面是一些代码:

 static ArrayList<Person> people = new ArrayList<>();

  void loadCourses(){ // putting Person objects in the list }

  public void countPeople()
{
    Stream<ArrayList<Person>> stream1 = Stream.of(people); 
    long l = stream1.count();
    System.out.println("Number of people loaded: " + l);

}
static ArrayList people=new ArrayList();
void loadCourses(){//将Person对象放入列表}
公众人物()
{
溪流1=溪流(人);
长l=stream1.count();
System.out.println(“加载的人数:+l”);
}

感谢您的帮助:)

您使用的是
,而不是

你想要:

long l = people.stream().count();
您得到的是
1
,因为只有一个
ArrayList


还要注意的是,您不需要流。你可以只做
people.size()

你使用的是
而不是

你想要:

long l = people.stream().count();
您得到的是
1
,因为只有一个
ArrayList


还要注意的是,您不需要流。你可以做
people.size()
作为@PaulBoddington的补充回答:我强烈建议你只使用
people.size()
。在Java-8中,当您使用诸如
people.stream().count()
之类的流来执行此操作时,它实际上会迭代整个
集合。因此,该代码的有效工作方式如下:

long count = 0;
for(Person p : people) count++;
return count;
对于大型收藏来说,这可能非常缓慢。相反,
people.size()
只返回存储在
ArrayList
中的size字段的值


这个问题已经在Java-9代码中解决了(请参阅),但是这个解决方案并没有向后移植到Java-8。

作为@PaulBoddington的补充回答:我强烈建议您只使用
people.size()
。在Java-8中,当您使用诸如
people.stream().count()
之类的流来执行此操作时,它实际上会迭代整个
集合。因此,该代码的有效工作方式如下:

long count = 0;
for(Person p : people) count++;
return count;
对于大型收藏来说,这可能非常缓慢。相反,
people.size()
只返回存储在
ArrayList
中的size字段的值


这个问题已经在Java-9代码中解决了(请参阅),但是这个解决方案没有向后移植到Java-8。

太棒了!成功了。是的,我可以用它,但我只是想熟悉溪流,所以是的。谢谢!杰出的成功了。是的,我可以用它,但我只是想熟悉溪流,所以是的。谢谢!