gpt4 book ai didi

java - 更高级版本的 Collections.frequency()

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:57 26 4
gpt4 key购买 nike

那么,假设我有以下列表:

List<Foo> myList = getListFromSomePlace();
int frequency = Collections.frequency(myList, someFoo);

这将计算所有 someFoo 匹配元素。

但是,如果我有一个更“复杂”的版本:

List<Foo> myList = getListFromSomePlace();
int frequency = /* get number of Elements in the List whose getInternalFoo() match a certain value */

这样做的一种方法是覆盖 Foo 类中的 equals 方法,但我真的很想避免将自定义行为放在 Foo 类中,特别是因为我可能想获得频率基于 Foo 类的不同属性,我只能有一个版本的覆盖 equals 方法。

Collections.sort 这样的函数可以让我传递一个自定义比较器,它可以完全满足我的需要,但 Collections.frequency 没有提供这个功能。

对于 Java8,我会使用流和一些 Lambda 表达式来解决这个问题,但我想看看是否有一个适用于 Java 7 的简单解决方案。我正在寻找不涉及编码的东西我自己的自定义频率方法,但使用一些现有的 API。有什么事吗?

最佳答案

我认为您无法避免编写自己的方法。如果您不想污染您的 API,请将其设为私有(private)。

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

关于java - 更高级版本的 Collections.frequency(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28708087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com