Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在列表中查找值_Java_List_Collections - Fatal编程技术网

Java 在列表中查找值

Java 在列表中查找值,java,list,collections,Java,List,Collections,我已将名单申报为 private List<Employees> employees; 然而,我得到演员例外 非常感谢您的帮助 谢谢 如果每次对列表进行排序并进行搜索,代码复杂度将是nlogn+logn,其中nlogn表示排序列表,logn表示二进制搜索 最好是线性搜索列表。线性搜索将采用BigO-n,其性能优于以前的方法 您在CollectionSort方法中获得强制转换异常,因为您的列表包含空值,如果您不能使用,则无法强制转换Employee并引发ClassCa

我已将名单申报为

        private List<Employees> employees;
然而,我得到演员例外

非常感谢您的帮助

谢谢

如果每次对列表进行排序并进行搜索,代码复杂度将是nlogn+logn,其中nlogn表示排序列表,logn表示二进制搜索

最好是线性搜索列表。线性搜索将采用BigO-n,其性能优于以前的方法

您在CollectionSort方法中获得强制转换异常,因为您的列表包含空值,如果您不能使用,则无法强制转换Employee并引发ClassCastException

myDAO.getEmployees(parameter);
在DAO中放一个where子句 然后,您可以对一个对象执行搜索

Employee emp = null;

    for(Employee e : employees) {
       if(e.getName().equals("X"))
           emp = e;
    }

    if(emp != null) {
      //handle the found employee
    }
    else {
      //employee not in list
    }
当然,您也可以重写它的equals方法,用该列实例化一个对象,然后使用我不推荐的方法

myDAO.getEmployees().get(object);

迭代列表并执行搜索操作:

String searchString = "abc";
for(Employee employee: employees) {
  if(employee.getName().equals(searchString)) {
    // Found something!
  }
}
如果要搜索Employee的所有字段,可能需要在Employee中创建一个检查实例上所有字段的方法:

boolean findString(String searchString) {
  if(getName().equals(searchString)) return true;
  if(getCity().equals(searchString)) return true;
  // etc..
  return false;
}

在for循环中使用此方法。

如果您的列表非常大,我建议在DAO中进行搜索-dbs可以调整为这种搜索的最佳性能,例如从员工中选择*,其中name='abc',然后使用DAO方法仅返回匹配的项

另一个不错的选择是apachecommons

乙二醇

显然,参数化出abc。如果要重用谓词,请将其设置为命名类


如果您有许多不同的方法来过滤集合,谓词实现尤其有用;另外,它让equals可以自由地进行真正的相等性检查。

您走在了正确的轨道上。简单地重写Employees中的equals方法不应该是Employeer吗?它描述的是一组员工还是只有一名员工

您的代码应该可以工作。您还可以按上述方式对员工进行分类,并提供一个比较指标:

Collections.sort(fields, new Comparator<Employee>() {
    @Override
    public int compare(Employee o1,Employee o2) {
        // TODO Rerturn 0 if equal or either 1 or -1 depending which of o1 or o2 is the bigger
    }
})

在后一种方法中,您不需要重写equals方法。

查找值是什么意思?您面临的问题是什么?可能是您试图在员工对象列表中搜索abc字符串吗?@NikolayKuznetsov我有一个名为abc的字符串,我想在员工列表中查找abc员工不是字符串。如果您遇到异常,您应该始终指定异常发生的确切代码行。如果存在异常消息,则应指定异常消息。这使人们更容易帮助你,从而使你更有可能得到适当的帮助。这是解决他的问题的最好办法吗?“最好”是有争议的,它是解决他的问题的办法。这个答案没有错+1.可以将搜索传递到数据库,避免搜索整个列表。然而,这并不总是可能的;int index=Collections.binarySearchemployees,abc;编译时,我得到了类java.util.Collectionsabc中找不到的sortjava.util.List,您应该传递Employee对象。binarySearchList@Polppan,员工是否实现了可比接口?
Employee emp = null;

    for(Employee e : employees) {
       if(e.getName().equals("X"))
           emp = e;
    }

    if(emp != null) {
      //handle the found employee
    }
    else {
      //employee not in list
    }
myDAO.getEmployees().get(object);
String searchString = "abc";
for(Employee employee: employees) {
  if(employee.getName().equals(searchString)) {
    // Found something!
  }
}
boolean findString(String searchString) {
  if(getName().equals(searchString)) return true;
  if(getCity().equals(searchString)) return true;
  // etc..
  return false;
}
matches = CollectionUtils.filter(employees, new Predicate<Employee>()
{
  @Override
  public boolean evaluate(Employee object)

    return "abc".equals(object.getName());
  }
});
Collections.sort(fields, new Comparator<Employee>() {
    @Override
    public int compare(Employee o1,Employee o2) {
        // TODO Rerturn 0 if equal or either 1 or -1 depending which of o1 or o2 is the bigger
    }
})