gpt4 book ai didi

java - Java 是否有类似于 C++ 标准库列表比较器的东西来通过变量值查找对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:34 24 4
gpt4 key购买 nike

在 Java 中是否有类似于 C++ 标准库列表的东西,它使用比较器通过其变量之一在列表中查找特定对象?

例如,不是通过检查变量比较来遍历 ArrayList 来查找特定对象。有没有办法使用比较器对象来查找特定实例?

(注意:我不想使用散列图,因为那样会创建两个单独的列表。我想要列表的功能,而不必涉及散列图。)

类似这样的东西,但对于 Java:

#include <algorithm>

using namespace std;

class Cperson
{
string lastname, firstname, address, city;
int zipcode;
char state[3];
// this works for the last name
friend bool operator==(const Cperson& left, const Cperson& right);
friend bool firstEqualTo(const Cperson& left, const Cperson& right);
};

bool operator==(const Cperson& left, const Cperson& right)
{
return left.lastname == right.lastname;
}

bool firstEqualTo(const Cperson& left, const Cperson& right)
{
return left.firstname == right.firstname;
}

现在我们可以在名字字段上搜索我们的人员列表,忽略其他字段:

vector<Cperson> personlist;    
// fill personlist somehow

Cperson searchFor; // should contain the firstname we want to find
vector<Cperson>::iterator fperson;
fperson= std::find(personlist.begin(),
personlist.end(),
searchFor,
firstEqualTo);

最佳答案

如果您可以使用 Google Guava,请查看该问题及其答案:Filtering on List based on one property with guava

更新:

如果您不喜欢 Google,因此不想使用他们的库,请尝试 Apache Commons Collections 的 CollectionUtils :

List<Person> filteredList = new ArrayList<Person>(allPersons);
CollectionUtils.filter( filteredList, new Predicate() {
boolean evaluate(Object object) {
//do whatever you want
}
});

缺点是 Commons Collections 本身不使用泛型。有一个通用的 port Commons Collections 3.1,但是。

关于java - Java 是否有类似于 C++ 标准库列表比较器的东西来通过变量值查找对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10281475/

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