¿Cómo combino las declaraciones de condición con esta expresión lambda particular?

algo como

Predicate<Deal> isDeal() {
        return deal -> deal.getGroup() == null 
                       && EnumSet.of(Instrument.ENUM1, 
                                     Instrument.ENUM2,
                                     Instrument.ENUM3)
                                 .contains(deal.getInstrument())
                ||
                "DEAL".equals(deal.getGroup()) 
                && !EnumSet.of(Instrument.ENUM2,
                                     Instrument.ENUM3)
                                 .contains(deal.getInstrument())
}
Respuesta 1

Algo como esto

public static Predicate<Deal> isDeal() {
   return  i->
        (i.getGroup() == null 
        && (i.getInstrument() == ENUM1
            || i.getInstrument() == ENUM2
            || i.getInstrument() == ENUM3)
        )
        ||
        ( i.getGroup() != null 
          && i.getGroup() == "DEAL" 
          && i.getInstrument() != ENUM2 && i.getInstrument() != ENUM3);
}

PD: Tenga en cuenta que debe comparar la cadena con equalsnot ==.

Respuesta: 2

No conozco su dominio comercial, pero intenté hacer que la condición sea más expresiva, legible y fácil de mantener. También le preguntaría al cliente por qué lo quieren con lambdas porque no veo ninguna razón para usarlos aquí. Una if-elsedeclaración le daría lo mismo sin los gastos generales.

public Predicate<Deal> isDeal() {
    return isGroupAbsent().or(isGroupPresent());
}

private Predicate<Deal> isGroupPresent() {
    Instrument i = i.getInstrument();
    return d -> "DEAL".equals(d.getGroup()) && i != ENUM2 && i != ENUM3;
}

private Predicate<Deal> isGroupAbsent() {
    Instrument i = i.getInstrument();
    return d -> d.getGroup() == null && (i == ENUM1 || i == ENUM2 || i == ENUM3);
}
Respuesta: 3

Estoy tratando de convertir apache.spark.ml.linalg.Vector a ArrayList en Java. El código fuente es así: Vector vector = (Vector) row.get (1); ArrayList <String> vectorList = new ArrayList <...

He visto respuestas aquí que pueden usar variables de const estáticas finales en Java para evitar que se compilen secciones de código. Mi preocupación con ese enfoque es que soy olvidadizo. :-( Soy ...

Mi fecha y hora está actualmente almacenada como marca de tiempo UNIX. Quiero mostrarlo como h: mm a en mi Recyclerview. ¿Dónde debo convertir la marca de tiempo UNIX a la hora normal en el adaptador RecyclerView / ...

La biblioteca Java en la que estoy trabajando actualmente se puede configurar con un archivo .properties en el classpath. Ahora quiero escribir pruebas JUnit que hagan lo siguiente: Si el archivo existe, afirme que el ...