gpt4 book ai didi

java - 根据处理中的多个条件过滤 ArrayList 内的对象 (Java)

转载 作者:行者123 更新时间:2023-12-01 22:05:02 25 4
gpt4 key购买 nike

我已经为此寻找了解决方案,但没有找到我所需要的。

我想知道如何创建一个通用方法来接受可变数量的条件,并根据这些条件返回 ArrayList 的子集。像这样的东西:

ArrayList<Measure> dataFiltered = allData.filter(
temperature: 20,
humidity: <80,
...
);

我不知道如何在方法声明中检索此条件,以及如何指向这些选定的变量来比较和创建过滤元素的子集:

public ArrayList<Measure> filter( /* ??? */ ) {
ArrayList<Measures> filteredMeasures = new ArrayList();

/* Manage conditions in here */

for(Measure measure : allMeasures) {
boolean allConditionsOK = true;
for(condition : conditions) {
// Point to specific variable set in conditions, and compare with value
if(measure.[condition(variable)] != condition(value)) {
allConditionsOK = false;
break;
}
}
if(allConditionsOK) filteredMeasures.add(measure);
}
return filteredMeasures;
}

最佳答案

如果您使用的是 Java 8,请查看 Stream.filter() 如何方法有效。

如果您不使用 Java 8,无论如何都要看看它,因为它是一个很好的示例,说明如何做到这一点,即定义一个具有一个方法 Predicate<T> 的接口(interface)(Java 8 使用 boolean test(T t) )。 .

然后调用通过实现一个类来提供方法,例如匿名类:

ArrayList<Measure> dataFiltered = allData.filter(new Predicate<Measure>() {
@Override
public boolean test(Measure m) {
return (m.getTemperature() == 20 &&
m.getHumidity() < 80);
}
});

或者 Java 8 中的 lambda 方式:

ArrayList<Measure> dataFiltered = allData.filter(m ->
m.getTemperature() == 20 && m.getHumidity() < 80
);

过滤方法就非常简单了:

public ArrayList<Measure> filter(Predicate<Measure> predicate) {
ArrayList<Measures> filteredMeasures = new ArrayList();
for (Measure measure : allMeasures)
if (predicate.test(measure))
filteredMeasures.add(measure);
return filteredMeasures;
}

关于java - 根据处理中的多个条件过滤 ArrayList 内的对象 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32954401/

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