所以我试图仅使用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);
}
感谢任何帮助:)
答案 0 :(得分:6)
您使用的是Stream<ArrayList<Person>>
而不是Stream<Person>
。
你想:
long l = people.stream().count();
您收到1
,因为只有一个ArrayList
。
另请注意,您不需要此流。你可以people.size()
。
答案 1 :(得分:2)
作为@PaulBoddington的补充回答:我强烈建议您只使用people.size()
。在Java-8中,当您使用people.stream().count()
之类的流执行此操作时,它实际上会遍历整个Collection
。所以这段代码有效地运作如下:
long count = 0;
for(Person p : people) count++;
return count;
对于大型收藏品来说,这可能会非常缓慢。相比之下,people.size()
只返回ArrayList
内存储的大小字段的值。
此问题已在Java-9代码中修复(请参阅JDK-8067969),但此修补程序未向后移植到Java-8。