我正在尝试计算对象数组中的元素。
long number = Stream.of(jobTitle).count();
System.out.println("There are " + number + " employees.");
发生的事情是,它将打印出消息的次数是具有相同职务的许多员工的次数。但是“数字”始终保持为1。
任何指导将不胜感激。
答案 0 :(得分:4)
long number = Stream.of(jobTitle).count();
计算包含一个元素的流中的元素。
此操作总是以完全相同的结果结束并不奇怪。
您的代码等同于:
List<Whatever> titels = new ArrayList<>();
titels.put(oneEntry);
... print titels.size()
长话短说:这种说法是荒谬的。您可能的意思是:
if (arbetstitel.equalsIgnoreCase(jobCount)){
g++;
或类似的内容。当然,g
对于计数器来说是一个很糟糕的名字。
但真正的答案是:退后一步。 思考,您打算解决什么问题,以及需要考虑哪些元素。您在此处显示的代码完全没有意义。我无法告诉您如何解决该问题,因为如上所述:目前尚不清楚您要实现的目标。
一种简单的计数方式:
long usersWithMatchingTitle = Arrays.stream(employees).filter(e -> e.getJobTitle().equalsIgnoreCase(jobTitleFromUser)).count();
含义:您可以将整个数组转换为流,然后过滤/计数所需的内容,而不是手动迭代数组。
请注意:您的代码似乎只关心该数组中的前30个元素。如果这确实是您想要的,则将需要...stream(employees).limit(30)...
答案 1 :(得分:0)
您需要更改命令流以定义适当的谓词过滤器选项。
Stream.of(employees).filter(e -> e.getJobTitle().equals(jobTitle)).count();