当前位置: 首页 > 知识库问答 >
问题:

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

姬银龙
2023-03-14

在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;    
}     

现在我们可以在firstname字段中搜索personlist,忽略其他字段:

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);

共有3个答案

李飞翼
2023-03-14

我相信JavaSet(请参阅留档)几乎与C STL版本直接并行。您可以覆盖equals运算符来设置自定义比较。

给定一个集合,您可以调用< code>mySet.contains(o)来查看该集合是否包含指定的对象。

在您的例子中,您首先创建一个表示您的person的Java类,将一组person对象存储在一个集合中,并确保重写<code>equals

请注意,建议您如果覆盖<code>equals</code>,还应覆盖<code>hashCode

孙承
2023-03-14

您可以随时为您的特定情况添加< code > Java . lang . comparable 的实现。

卞俊贤
2023-03-14

如果你可以使用谷歌番石榴看看这个问题及其答案:基于番石榴的一个属性过滤列表

更新:

如果您不喜欢Google并且因此不想使用他们的库,请尝试Apache Commons Collection的Coll的Utils

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

缺点是Commons集合本身不使用泛型。然而,有一个通用的公共端口集合3.1。

 类似资料:
  • 问题内容: C#属性(我的意思是get和set方法)是一个非常有用的功能。Java是否也具有类似于C#属性的内容。我的意思是我们如何在Java中实现类似以下C#代码的内容: 问题答案: 不,Java没有等效性。它只有访问器和更改器方法,以及getter和setter方法的奇特名称。例如:

  • 问题内容: 我想检查一个对象是否是类的实例或的子类。 例如,如果is是类,我想成为并且也要成为。 我希望它也适用于装箱的原始类型。例如,如果是那么应该是。 有这样的事吗?如果没有,如何实现这种方法? 问题答案: Class.isInstance可以满足您的需求。 当然,如果可以使用它,则不应该使用它,但是对于反射场景,它通常派上用场。

  • Mac OS X和iOS有一个名为的不错的小类。它是一个单例,可让您存储字符串、数组和原语,并且您始终可以实现一些方法来向其添加自定义对象。当您需要存储快速设置而无需处理文件操作(例如,存储最后选择的字体名称)时,它非常有用。 Java有类似这样简单的东西吗?我希望能够存储用户的最后设置,以便在程序重新加载时重新加载类似的状态,但我不确定在Java中最好的方法是什么。

  • 问题内容: 我被迫将JUnit3用于特定的测试套件。我的理解和服务的功能和,但有一个模拟和对事情应该发生一次测试开始之前,一旦所有的测试运行后? 问题答案: 好的,我应该搜索得更好。 Junit 3中的班级拆解?

  • Java有Future或FutureTask,可以在新线程中运行任务。然后,将执行结果返回到原始线程。Swift中是否有任何功能可以实现这一点?

  • 我想用超文本标记语言检查某个文本,比如“无值”,如果存在,就给它赋值0。有人知道怎么做吗?(谷歌了很多,但没有找到任何相关的东西)