Java 使用';收藏。频率';获取给定一个值的实例数
为了简化我正在做的事情,让我们使用我修改了一些位的示例Java 使用';收藏。频率';获取给定一个值的实例数,java,collections,frequency,Java,Collections,Frequency,为了简化我正在做的事情,让我们使用我修改了一些位的示例 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 emp
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()));
}
}
}
封装测试;
导入java.util.StringTokenizer;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Set;
班级员工{
私有字符串empno;
私有字符串名称;
公共雇员(字符串empno,字符串empName){
this.empno=empno;
this.empName=empName;
}
公共字符串getEmpno(){
返回empno;
}
public void setEmpno(字符串empno){
this.empno=empno;
}
公共字符串getEmpName(){
返回empName;
}
public void setEmpName(字符串empName){
this.empName=empName;
}
@凌驾
公共字符串toString(){
返回“Empno is”+Empno+“Empname is”+Empname;
}
公职人员(){
//TODO自动生成的构造函数存根
}
@凌驾
公共布尔等于(对象arg0){
//TODO自动生成的方法存根
布尔标志=假;
Employee=(Employee)arg0;
if(null!=employee&&employee.getEmpName().equalsIgnoreCase(empName)&&employee.getEmpno().equalsIgnoreCase(empno)){
flag=true;
}
返回标志;
}
}
公开课考试{
公共静态void main(字符串[]args){
List empList=new ArrayList();
添加(新员工(“001”,“Shidhar”));
添加(新员工(“002”,“path”));
添加(新员工(“003”、“萨哈纳”);
添加(新员工(“003”、“萨哈纳”);
添加(新员工(“004”、“萨哈纳”);
添加(新员工(“003”、“萨哈纳”);
//从雇员列表中获取“新雇员”(“003”,“萨哈纳”)”的出现
//int sahanaCount=Collections.frequency(雇员列表,新雇员(“003”);
//System.out.println(“sahana计数为:“+sahana计数”);
Set uniqueId=新哈希集(empList);
对于(员工emId:uniqueId){
System.out.println(“重复了id为“+emId.getEmpno()+”的emp:”
+Collections.frequency(empList,emId.getEmpName());
}
}
}
是否可以使用Collections.frequency
查找给定一个变量的频率,例如Collections.frequency(雇主,“Sahana”)代码>得到4
另一种选择是我可以使用HashMap来保持计数,但假设我对集合的频率印象深刻,并尝试使用它。不,考虑到等于的实现,这是不可能的。在Java-8中,您可以使用流API而不是Collections.frequency
:
empList.stream().map(Employee::getEmpName).filter(emId.getEmpName()::equals).count();
不,这是不可能的,因为您实现的等于。在Java-8中,您可以使用流API而不是Collections.frequency
:
empList.stream().map(Employee::getEmpName).filter(emId.getEmpName()::equals).count();
自
返回指定集合中等于的元素数
指定的对象。更正式地说,返回元素e的数量
在集合中,使得(o==null?e==null:o.equals(e))
所以是的,你可以使用Collections.frequency
。但是您必须小心使用equals方法,并根据您的实现重写它,这将从方法本身为集合.frequency
方法识别相等的对象
返回指定集合中等于的元素数
指定的对象。更正式地说,返回元素e的数量
在集合中,使得(o==null?e==null:o.equals(e))
所以是的,你可以使用Collections.frequency
。但是,您必须小心使用equals方法,并根据您的实现重写它,这将为集合标识相等的对象。频率方法集合
不适合多次存储对象。设置从中删除重复项。您需要在代码中进行一些更改才能实现这一点
- 使用
ArrayList
或任何其他列表实现,而不是HashSet
- 在
equals()
方法中,对象的相等是通过比较empno
和empName
来完成的。因此,在创建empno
对象时,在添加到集合中时应使用相同的empno
值以通过相等比较。否则,需要修改equal()方法
代码更改为“003”而不是“004”
并删除下面的行
Set<Employee> uniqueId = new HashSet<Employee>(empList);
最后传递employee
实例,而不是传递employee
实例的empName
。这将打印列表中存在的重复对象的数量。这就是Collections.frequency
方法的目的
要获得基于“empName”的计数,您应该使用如下自定义实现
private int getCount(String empName){
int count = 0;
for (Employee employee : empList) {
if(employee.getEmpName() != null && employee.getEmpName().equals(empName)){
count++;
}
}
return count;
}
集合
不适合多次存储对象。设置从中删除重复项。您需要在代码中进行一些更改才能实现这一点
- 使用
ArrayList
或任何其他列表实现,而不是HashSet
- 在
equals()
方法中,对象的相等是通过比较empno
和empName
来完成的。因此,在创建empno
对象时,在添加到集合中时应使用相同的empno
值以通过相等比较。否则,需要修改equal()方法
代码更改为“003”而不是“004”
并删除下面的行
Set<Employee> uniqueId = new HashSet<Employee>(empList);
最后传递employee
实例,而不是传递的empName