Java:实现搜索功能。如果找不到则返回失败

时间:2016-08-23 17:37:41

标签: java search return

我正在尝试实现搜索功能。如果找到匹配的元素,该函数将返回Prestamo类型的对象。如果没有找到任何内容,该函数不应该返回任何内容,但是我(当然)会抱怨错误的返回语句。这种问题是如何解决的?我想Try-catch可能是我的朋友,但我很难理解这种语法。

这是我的代码:

    public Prestamo buscarPrestamoPorUUID(UUID idPrestamo, ArrayList<Prestamo> listaBuscar) {
    Iterator<Prestamo> it = listaBuscar.iterator();
    Prestamo esteElemento;
    while (it.hasNext()) {
        esteElemento = it.next();
        if (esteElemento.getActivo() && esteElemento.getIdPrestamo().equals(idPrestamo)) {
            return esteElemento;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果找不到匹配项,您可以让它返回null。这将需要buscarPrestamoPorUUID()方法的调用者对null进行测试,并使用try / catch或其他方式来处理它。即:

Prestamo test = buscarPrestamoPorUUID(someID, someList);

if(test == null)
   { /* handle no match found */ }
else
   { /* handle result found */ }

答案 1 :(得分:0)

在Java中,对方法的控制必须以两种方式之一结束:

  1. 一个return语句,它返回方法签名中声明的类型的对象OR null
  2. 抛出的异常(如果Exception没有扩展RuntimeException,则必须在方法签名中声明它。)
  3. 要解决编译错误,您需要执行其中一个错误。如果你想做前者,它可能看起来像这样:

    public Prestamo buscarPrestamoPorUUID(UUID idPrestamo, ArrayList<Prestamo> listaBuscar) {
        Iterator<Prestamo> it = listaBuscar.iterator();
        Prestamo esteElemento;
        while (it.hasNext()) {
            esteElemento = it.next();
            if (esteElemento.getActivo() && esteElemento.getIdPrestamo().equals(idPrestamo)) {
                return esteElemento;
            }
        }
        return null;
    }
    

    请确保调用此方法的逻辑已准备好处理null。

    如果你想做第二次,你会做这样的事情:

    public Prestamo buscarPrestamoPorUUID(UUID idPrestamo, ArrayList<Prestamo> listaBuscar) {
        Iterator<Prestamo> it = listaBuscar.iterator();
        Prestamo esteElemento;
        while (it.hasNext()) {
            esteElemento = it.next();
            if (esteElemento.getActivo() && esteElemento.getIdPrestamo().equals(idPrestamo)) {
                return esteElemento;
            }
        }
    
        throw new RuntimeException("Didn't find an entity with the provided UUID!");
    }
    

    我个人更喜欢前者和后者。它完全有效地使用了null,它使得该方法比不必担心未捕获的异常更容易使用。无论如何,请注意这两种实现最终如何达到returnthrow语句。这就是编译器检查的内容。

    (P.S。:为了清晰代码,你可以用for-each循环替换你的while循环。)