Cuando aplicar predicado en lugar de booleano

Leviand:

Estaba leyendo un hilo no relacionada , cuando leí un comentario: Cada vez que me encuentro que necesitan un lambda de varias líneas, muevo las líneas a un método privado y paso el método de referencia en lugar de la lambda.

Me estaba preguntando: ¿cuál es la forma correcta de implementar este comportamiento? Con un método booleano como publicado en el comentario, o con el predicado?


Ejemplo: Digamos que desee comprobar si una Tablees utilizable, en donde los medios utilizables isClean, isEmpty, hasChair.

class Table{
    public boolean hasChair(){...}
    public boolean isClean(){...}
    public boolean isEmpty(){...}
}

Puedo aplicar mi prueba para filtrar mi lista List<Table> tablesList = Arrays.asList(table1,table2,table3,table4);de 2 maneras: la primera con booleana:

public boolean isUsable(){
    return hasChair() && isClean() && isEmpty();
}

Y utilizarlo con tablesList.stream().filter(Table::isUsable)

La segunda manera es con el predicado:

public Predicate<Table> isUsable(){
    return table -> table.isEmpty() && table.isClean() && table.hasChair();
}

Se puede utilizar con tablesList.stream().filter(isUsable())


¿Qué es la aplicación correcta? ¿Por qué elegir un lugar de otro? ¿Hay alguna diferencia grande?

Peter Lawrey:

Creo que quería decir para el segundo ejemplo

public static Predicate<Table> isUsable(){
    return table -> table.isEmpty() && table.isClean() && table.hasChair();
}

Que ya podría sugerir esta forma es probable que confundir al lector. Sin staticusted podría escribir table.isUsable()o Table::isUsablepero no haría lo que usted piensa.

¿Qué es la aplicación correcta?

Yo preferiría el Table::isUsable, ya que también se puede utilizar como table.isUsableun ejemplo.

¿Por qué elegir un lugar de otro?

Siento el primer ejemplo es más natural y menos confuso.

La segunda forma es más útil para manipular predicados por ejemplo Predicate.or (predicado)

¿Hay alguna diferencia grande?

En este caso, el uso de una corriente es probable que sea más lento, pero más importante aún, más propensos a confundir.

Una de las ventajas del método de devolución de un predicado es que podría ser añadido a cualquier clase, por ejemplo, no se puede alterar la tabla por alguna razón.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184379&siteId=1
Recomendado
Clasificación