为了简化我正在做的事情,让我们使用我修改了几位的learnfromexamples.com示例。
package test;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
class Employee {
private String empno;
private String empName;
public Employee(String empno, String empName ) {
this.empno = empno;
this.empName = empName;
}
public String getEmpno() {
return empno;
}
public void setEmpno(String empno) {
this.empno = empno;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
@Override
public String toString() {
return "Empno is "+ empno + " Empname is " + empName;
}
public Employee() {
// TODO Auto-generated constructor stub
}
@Override
public boolean equals(Object arg0) {
// TODO Auto-generated method stub
boolean flag = false;
Employee employee = (Employee) arg0;
if(null!= employee && employee.getEmpName().equalsIgnoreCase(empName) && employee.getEmpno().equalsIgnoreCase(empno)){
flag = true;
}
return flag;
}
}
public class Test {
public static void main(String[] args) {
List<Employee> empList = new ArrayList<Employee>();
empList.add(new Employee("001", "Shidhar"));
empList.add(new Employee("002", "Pathy"));
empList.add(new Employee("003", "Sahana"));
empList.add(new Employee("003", "Sahana"));
empList.add(new Employee("004", "Sahana"));
empList.add(new Employee("003", "Sahana"));
//Get the occurrence of "new Employee("003", "Sahana")" from empLists
//int sahanaCount = Collections.frequency(empList, new Employee("003"));
//System.out.println("Count of sahana is : " +sahanaCount);
Set<Employee> uniqueId = new HashSet<Employee>(empList);
for (Employee emId : uniqueId) {
System.out.println("The emp with id "+emId.getEmpno()+" was repeated: "
+ Collections.frequency(empList, emId.getEmpName()));
}
}
}
是否可以使用Collections.frequency
查找给定一个变量的频率,例如产生4的Collections.frequency(empList,"Sahana");
。
另一种选择是我可以使用HashMap来保持计数,但是让我说我对Collections.frequency
印象深刻并尝试使用它。
答案 0 :(得分:2)
不,鉴于您实施equals
,这是不可能的。在Java-8而不是Collections.frequency
中,您可以改为使用Stream API:
empList.stream().map(Employee::getEmpName).filter(emId.getEmpName()::equals).count();
答案 1 :(得分:2)
foreach ($everything as $innerArray) {
if (is_array($innerArray)){
foreach ($innerArray as $value) {
echo $value['nazev_1'];
}
}
}
不适合多次存储对象。设置从中删除重复项。您需要在代码中进行一些更改才能使其成功
Sets
或任何其他列表实施,而不是ArrayList
HashSet
方法中,对比equals()
和empno
完成对象的相等性。因此,您应该在创建{时使用相同的empName
值添加到集合以传递相等比较时的{1}}对象。否则,需要修改equal()方法。代码更改为“003”而不是“004”
empno
并删除以下行
Employee
其中empList.add(new Employee("003", "Sahana"));
empList.add(new Employee("003", "Sahana"));
empList.add(new Employee("003", "Sahana"));
empList.add(new Employee("003", "Sahana"));
将列表作为参数。现在,直接迭代列表
Set<Employee> uniqueId = new HashSet<Employee>(empList);
最后传递HashSet
实例,而不是传递for (Employee employee : empList) {
System.out.println("The emp with id "+employee.getEmpno()+" was repeated: "
+ Collections.frequency(empList, employee);
}
实例的employee
。这应该打印列表中存在的重复对象的数量。这是empName
方法的用途。
要根据'empName'获取计数,您应该选择
之类的自定义实现employee
答案 2 :(得分:1)
来自JavaDoc本身
返回指定集合中等于的元素数 指定的对象。更正式地说,返回元素的数量e 在集合中(o == null?e == null:o.equals(e))。
所以是的,你可以使用Collections.frequency
。但是你必须小心使用equals方法并根据你的实现覆盖它,这将为Collections.frequency
方法识别相等的对象