gpt4 book ai didi

java - 返回集合中所有值的总和以及特定值的总和的两种方法

转载 作者:行者123 更新时间:2023-12-01 18:33:05 27 4
gpt4 key购买 nike

想象一个如下所示的类。我必须编写一些代码来汇总集合的所有值以及满足给定标准的所有值。

class MyClass {
private String name;
private int value;
}

我当前的代码如下所示。以下功能是否有更优雅的设计模式?

public static int sumFilter(Collection<MyClass> collection, String filter) {
int result = 0;
for (MyClass myClass : collection) {
if (filter == null || filter.equals(myClass.getName()) {
result += myClass.getValue();
}
}
return result;
}

public static int sumAll(Collection<MyClass> collection) {
return sumFilter(collection, null);
}

最佳答案

对现有方法的改进:

您可以通过使用 Filter 作为接口(interface)(并且必须添加更多代码)来为过滤规则添加更多灵 active - 与调用 Collections.sort< 时应用不同的比较规则非常相似 具有自定义 Comparator 的方法,例如:

interface Filter<T> {
boolean include(T item);

public final static Filter<Object> INCLUDE_ALL = new Filter<Object>() {
@Override
public boolean include(Object item) {
return true; /* includes everything unconditionally */
}
};
}



public static int sumFilter(Collection<MyClass> collection,
Filter<? super MyClass> filter) {

int result = 0;
if (filter == null) {
filter = Filter.INCLUDE_ALL;
}
for (MyClass item : collection) {
if (filter.include(item)) {
result += item.value;
}
}
return result;
}

public static int sumAll(Collection<MyClass> collection) {
return sumFilter(collection, Filter.INCLUDE_ALL);
}

然后,您可以使用具有更复杂规则的自定义过滤器(而不是像示例中那样只是 String.equals ),例如与正则表达式匹配:

    new Filter<MyClass>() {

@Override
public boolean include(MyClass item) {
return item.getName().matches("some regex");
}
};

关于java - 返回集合中所有值的总和以及特定值的总和的两种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269932/

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