Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据equals方法的不同实现计算列表中项目的频率_Java_Android_Collections - Fatal编程技术网

Java 根据equals方法的不同实现计算列表中项目的频率

Java 根据equals方法的不同实现计算列表中项目的频率,java,android,collections,Java,Android,Collections,我正在使用Collections.frequency计算列表中对象的频率。 我推翻了equals方法。 我的用例对象是一个菜单项 equals方法在返回true之前检查名称和其他属性是否都相等 如果这是我想要的相等类型,那么这就行了 有时我想根据MenuItem id检查它们是否相等 我的问题是,, 已经实现了equals方法, 我无法将此用于Collection.frequency 如何根据equals方法的不同实现计算列表中项目的频率 多谢各位 Stefano下面是java.util.Col

我正在使用Collections.frequency计算列表中对象的频率。 我推翻了equals方法。 我的用例对象是一个菜单项

equals方法在返回true之前检查名称和其他属性是否都相等

如果这是我想要的相等类型,那么这就行了

有时我想根据MenuItem id检查它们是否相等

我的问题是,, 已经实现了equals方法, 我无法将此用于Collection.frequency

如何根据equals方法的不同实现计算列表中项目的频率

多谢各位


Stefano

下面是java.util.Collectionsfrequency的实现

没那么复杂。您可以创建自己的CollectionUtils类,并定义一个方法来获取接受比较器作为参数的集合的频率

public static <T> int frequency(Collection<T> c, T o, Comparator<? super T> comp) {
    int result = 0;
    if (o == null) {
        for (Object e : c)
            if (e == null)
                result++;
    } else {
        for (T e : c)
            if (comp.compare(e,o) == 0)
                result++;
    }
    return result;
}
public static <T> int frequency(Collection<T> c, T o, Comparator<? super T> comp) {
    int result = 0;
    if (o == null) {
        for (Object e : c)
            if (e == null)
                result++;
    } else {
        for (T e : c)
            if (comp.compare(e,o) == 0)
                result++;
    }
    return result;
}