Quindi, supponendo che uso i filtri casuale in un flusso, il modo più semplice è quello di immettere direttamente il predicato:Qual è la differenza tra l'utilizzo di un predicato o una funzione come filtro di flusso Java?
x.stream().filter(e -> e % 2 == 0)
Così posso semplicemente fare riferimento e definire il predicato in anticipo:
Predicate<Integer> isEven = e -> e % 2 == 0;
...
x.stream().filter(isEven)
Ma posso anche usare una funzione:
private static boolean isEven(Integer integer) {
return integer % 2 == 0;
}
...
x.stream().filter(MyClass::isEven)
Per quanto posso dire, il predicato è, naturalmente, molto più limitata, mentre il la funzione potrebbe avere effetti collaterali ecc. Ma poiché persone come Venkat Subramaniam usano quest'ultima soluzione, mi chiedo davvero: quali sono le differenze principali qui?
Vedo che senza MR saremo in grado di definire solo predicati che sono veramente limitati per quanto riguarda la loro riusabilità. Quindi questo porta alla domanda qual è il modo più pulito di scrivere? Usando un MR, un Predicato o la stessa affermazione? – AdHominem
@AdHominem dipende dal tuo contesto. Se non si intende riutilizzare il predicato, attenersi a un'espressione lambda semplice, ma se si intende continuare a riutilizzarlo, suggerisco di creare un'istanza Predicate statico in alcune classi utils senza creare un metodo stesso –